MCP server for diffusers-workflow. Provides tools to author, run, diagnose and manage generative AI image and video workflows on a Hugging Face Diffusers engine with GPU acceleration.
The server defines 38 tools with generally clear naming (verb_noun patterns like list_workflows, get_workflow, run_workflow) and decent parameter schemas. However, there are significant gaps in description quality and output schema documentation. Many tool descriptions are present but lack the depth needed for LLM-optimal selection, they don't clearly explain WHEN to use the tool vs. alternatives, or what the output structure is. Parameter descriptions exist but are often generic. Critical observation: descriptions like 'List the workflows stored on the server, compactly' and 'Retrieve the full definition of a workflow by name or path' are minimal (40-75 chars) compared to the baseline average of 194 chars for A+ tools. The list_workflows description is unusually verbose and technical, mixing filtering logic with output field explanations rather than focusing on user intent. No documented output schemas visible for any tool. Error handling is not evident from the tool definitions. Security posture appears reasonable (no API keys in parameters visible), but no permission gates or audit trail declarations are apparent.
Cancel a running or queued job
Create a new stored prompt template on the server
Create a new workspace on the server
Delete an input asset file from the server
Delete a cached model from the Hugging Face hub cache
Delete a stored prompt template from the server
Delete an entire workspace from the server
Output schemas are not documented for any tool. LLMs cannot infer what fields to expect in responses, limiting their ability to chain tools and extract required data for downstream calls.
Many tool descriptions are too brief (25-45 characters) and lack context about WHEN to use the tool and what problem it solves. Baseline for A+ tools is 194 chars. Examples: 'List the utility tasks available on the server for workflow composition' (70 chars), 'Retrieve the full definition of a workflow by name or path' (58 chars). Descriptions should explain user intent, not just API semantics.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
Get the arguments and schema for a specific diffusers pipeline
Get detailed description and schema for a specific task
Retrieve diagnostic information about a failed or problematic job
Download a job output file
Export a completed job as a portable bundle (zip or directory)
Retrieve an input asset file from the server
Retrieve documentation for authoring workflows and using the server
Get the manifest and status of a completed job
Retrieve audio from a job's outputs
Retrieve video frames from a job's outputs as contact sheet or individual frames
Retrieve a generated image from a job's outputs
Retrieve a stored prompt template by name
Get the schema for a stored prompt template
Get server configuration, accelerator type, workspace and directory information
Retrieve the full definition of a workflow by name or path
Promote a generated file from a job into the assets directory for reuse
List input media files (images, video, audio) available on the server
List all job outputs organized by workflow
List documentation sections available on the server
List the diffusers pipelines and models available on the server
List the stored prompt templates available on the server
List the utility tasks available on the server for workflow composition
List the workflows stored on the server, compactly. Decide the deliverable's shape first and pass it: one of image, image-set, image-edit, shot, sequence, audio, text, utility. `traits` narrows further (comma-separated, all must match): has-audio, chained, image-conditioned, identity-referenced, needs-input-media, composes-workflows. Each entry carries a one-line `summary`, its `shape` and `traits` (what it needs supplied), `cost` (curated: figures a maintainer measured once on the devices named and wrote into the workflow, never derived from this server's job history - so null means nobody wrote one down, not that the run is cheap; the answer's `cost_basis` says as much. It is also the mark of an entry that has been run through on a real device: one without a `cost` has only been authored, and its first run is the one that finds what the description could not verify. `observed_minutes` and `observed_runs`, when present, are this box's *own* finished runs of that workflow - the cold median, model load included, and how many runs are behind it. Prefer it when quoting a price for this machine, fall back to `cost`, and say "unknown" only when neither is there; say which one you used, since a figure a maintainer measured on their card and one this box averaged last week are different claims), output kinds and variable names. `lists`, present for a list-driven workflow, names per list variable the fields an entry takes, the steps run over it and the default's length; there `cost[].per_entry`, when present, is the measured cost of one entry (`{variable, minutes, entries}`), so a run over a different-length list can be priced from it. `constraints`, present for a workflow that bounds a variable
List the available workspaces on the server
Queue a workflow job to run on the server's GPU. Requires acknowledged_cost=true for expensive operations.
Scan the Hugging Face hub cache for downloaded models
Update an existing stored prompt template
Upload an input media file to the server's assets directory
Switch the current session to a different workspace
Validate a workflow definition without running it. Checks schema, arguments, references, costs and warnings.
Block until a job completes, polling its status
The list_workflows description is verbose and mixes implementation details (filter logic, cost semantics, observed_minutes calculations) with user-facing intent. It reads like API documentation rather than an LLM-optimized tool selection guide. Refactor to lead with 'Find workflows by deliverable shape (image, audio, text, etc.) and filter by traits like has-audio or needs-input-media.' Then document the response structure separately.
No error handling guidance in tool descriptions. Tools like run_workflow and delete_workspace are destructive but don't explain what errors to expect or how to recover. LLMs need explicit recovery hints.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) detected in tool definitions. This forces LLMs to infer tool safety from descriptions alone, increasing errors and unsafe invocations.
Parameter descriptions are present but minimal. Many are single-line explanations (25-35 chars) that don't explain format, constraints, or examples. Examples: 'The workflow name or path' (32 chars), 'The task identifier' (19 chars). Add format hints like '(relative path within workspace)' or enumerate valid values if constrained.
List and discovery tools (list_workflows, list_prompts, list_assets, list_models, list_workspaces, list_gallery, list_guides, list_tasks) lack pagination parameters (limit, offset, page_size) visible in schemas. Large result sets will exceed context windows. Add limit and cursor/offset parameters and document max default sizes.
The acknowledged_cost pattern is used across multiple WRITE and DESTRUCTIVE tools (run_workflow, create_prompt, upload_asset, delete_asset, delete_workspace, delete_model, etc.) but is inconsistently typed, some accept object|boolean. Clarify: when should cost be a string fingerprint vs. a boolean confirmation? Document the contract in tool descriptions so LLMs know what to pass.