A local AI infrastructure dashboard and API server providing interfaces for ComfyUI image generation, Ollama LLM chat, job queue management, and gallery storage
Static source inference · medium confidence · evidence: Streamable HTTP
Current-spec patterns detected
Summary
This HTTP server exposes 14 tools across two applications (Next.js dashboard and Flask UI), but suffers from critical definition quality gaps. Tool naming is inconsistent and sometimes unclear (e.g., '/api/comfyui/generate' vs '/generate' for the same operation). Descriptions exist but are generic and lack LLM-optimized guidance on when to use each tool. Parameter schemas are partially present but incomplete, many parameters lack detailed constraints, enums, or format specifications. No output schemas are documented. Error handling is minimal with no recovery guidance. The server is HTTP-based but does not appear to implement MCP protocol at all, tools are bare REST endpoints without MCP tooling structures, schemas, or capabilities negotiation.
Tools (14)
DELETE /api/gallerydestructive50/100
Delete a gallery item
DELETE /api/jobsdestructive48/100
Delete a job record
GET /api/comfyui/statusread only50/100
Check the status of an image generation job
GET /api/galleryread only50/100
List gallery items with pagination, search, and filtering
GET /api/jobsread only50/100
List all jobs with optional filtering by status and type
GET /api/ollama/modelsread only50/100
List all available Ollama models
GET /api/system/statusread only50/100
Get system and service health status including Ollama and ComfyUI connectivity
GET /healthread only
Check health status of the UI service and ComfyUI connectivity
NO MCP PROTOCOL IMPLEMENTATION, Server exposes bare HTTP REST endpoints, not MCP tools. No tool registration, capabilities negotiation, or protocol version handling detected.
DUPLICATE TOOLS with inconsistent naming, /api/comfyui/generate and /generate both queue image jobs; /api/comfyui/status and /status/<prompt_id> both check job status. LLM cannot distinguish which to call.
POST /api/comfyui/generatePOST /generateGET /api/comfyui/statusGET /status/<prompt_id>
CRITICAL
Recommendations
Wrap all endpoints in a proper MCP server implementation (use mcp/ts library or equivalent). Register tools with names, descriptions, input schemas, and output schemas via the MCP tooling interface.
Eliminate duplicate tools: merge /api/comfyui/generate + /generate into a single, well-named tool (e.g., 'queue_image_generation'). Merge status endpoints similarly.
Add formal output schemas for all 14 tools. Example for POST /api/comfyui/generate: { jobId: string, promptId: string, status: 'queued'|'processing'|'complete'|'failed', estimatedTime?: number }
Convert free-form string parameters into enums where valid values are known. For /api/comfyui/generate, define sampler as enum: ['euler', 'heun', 'dpmpp_2m', ...]. For /api/jobs, status as enum: ['pending', 'processing', 'complete', 'failed', 'cancelled'].
Expand parameter descriptions to include format constraints, ranges, and valid values. Example: 'status: Filter jobs by status. Valid values: pending, processing, complete, failed, cancelled. Default: all statuses.'
Add output metadata to paginated endpoints. Include total_count and next_offset in /api/gallery and /api/jobs responses so agents can iterate without guessing.
Document response structures in tool schemas. For POST /api/ollama/chat, specify that output is streaming JSON with { role: 'assistant', content: string } per line.
Add error recovery patterns: return structured error objects with code, message, and recovery_hint. Example: { error: 'ModelNotFound', message: 'Model gpt2 not available', recovery_hint: 'Call GET /api/ollama/models to list available models' }
Score history
Overall score trend
↓ 6 points across a rubric change (v1 → v2)
32/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-22
F
32
2026-07-28+
v2
2026-03-09
F
38
-
v1
GET /status/<prompt_id>read only
Check the status of an image generation job and retrieve output filenames
PATCH /api/gallerywrite50/100
Update a gallery item's favorite status and tags
POST /api/comfyui/generatewrite50/100
Queue an image generation job in ComfyUI with specified parameters
POST /api/ollama/chatwrite50/100
Stream chat messages from an Ollama LLM model with optional conversation storage
OUTPUT SCHEMAS MISSING, None of the 14 tools document return structure. Agents cannot plan downstream calls or extract required fields. Critical for composability.
DESTRUCTIVE TOOLS WITHOUT CONFIRMATION, DELETE /api/gallery and DELETE /api/jobs have no dry-run, confirmation, or recovery pattern. Agents risk permanent data loss.
MISSING ENUMS FOR CONSTRAINED FIELDS, /api/comfyui/generate accepts 'sampler' and 'scheduler' as free-form strings with no valid value list. /api/jobs 'status' and 'type' params lack enums. Agents will hallucinate invalid values.
INCOMPLETE PARAMETER DESCRIPTIONS, Many parameters lack format, range, or valid-value guidance. E.g., 'status' param in /api/jobs is described as 'Filter by job status' without listing valid statuses.
NO ERROR RECOVERY GUIDANCE, All error responses are implicit (HTTP status codes only). No actionable error messages or recovery suggestions. E.g., 'ComfyUI not responding: 503' tells agent nothing about next steps.
POST /api/comfyui/generatePOST /generateGET /api/galleryGET /api/jobs
PAGINATION NOT FULLY DOCUMENTED, /api/gallery and /api/jobs accept limit/offset but response does not include total_count or next_cursor. Agents cannot know if more results exist.
PARAMETER TYPE AMBIGUITY, 'tags' parameter in PATCH /api/gallery is array but element type (string) not specified. 'messages' in POST /api/ollama/chat is array without structure definition (role, content fields not documented).
INCONSISTENT PARAMETER NAMING, One endpoint uses 'promptId' (camelCase), another uses 'prompt_id' (snake_case). Tool definitions mix naming conventions, forcing LLM to track multiple formats.
GET /api/comfyui/statusGET /status/<prompt_id>
Implement a dry-run pattern for destructive operations. Add optional 'dry_run: boolean' parameter to DELETE endpoints so agents can preview impact before committing.
Standardize parameter naming: use snake_case everywhere (prompt_id, not promptId). Update both dashboard and Flask app for consistency.
Add input validation with clear feedback. When an agent passes invalid sampler name, return: { error: 'InvalidSampler', message: 'Sampler must be one of: euler, heun, dpmpp_2m. Got: invalid_sampler' }
For POST /api/ollama/chat, document the message structure: { role: 'user'|'assistant', content: string }. Specify which roles are valid and in what order.
Add tool annotations to indicate read-only, write, and destructive operations once MCP protocol is implemented. Use readOnlyHint, destructiveHint, and idempotentHint.
Provide discovery guidance: In descriptions for dependent tools, hint at prerequisites. E.g., 'POST /generate: Queue an image. First call GET /api/ollama/models to confirm SDXL is loaded.'