An MCP server that delegates tasks to local Ollama models organized into preset roles with tuned system prompts and options
Three tools with clear action verbs and reasonable descriptions. All have input schemas with type definitions. However, descriptions lack LLM-optimized guidance on WHEN to use each tool vs alternatives, and parameter descriptions are sparse. The 'delegate' tool's role enum is empty at registration time (populated dynamically), which breaks schema validation. Error handling is present but generic. Output schemas are undocumented.
Delegate a task to a local model worker (cheap, private, free). Best for bulk mechanical text work — summarizing, extracting, classifying, transforming provided material — not for tasks needing deep reasoning. Roles: - "<role>": <description> (dynamically populated from config)
Fan out multiple independent tasks to local model workers in parallel. Same semantics as delegate, one entry per task. Results return in input order. Max <maxParallelTasks> tasks per call.
Escape hatch: run a task on any pulled Ollama model with a custom system prompt. Use ONLY when no preset role fits — prefer delegate. Model must already be pulled.
Role enum is empty at schema registration time; populated dynamically from config. This breaks static schema validation and prevents LLMs from seeing valid role options until runtime. Clients cannot discover available roles from the schema alone.
Output schemas are completely undocumented. LLMs cannot plan downstream tool calls or extract structured data. No documentation of what fields are returned, their types, or how to chain results.
Parameter descriptions are minimal or missing. 'system_prompt' in delegate_custom has no description. 'context' and 'instructions' descriptions are adequate but others lack guidance on format, constraints, or dependencies.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Tool descriptions do not explain WHEN to use each tool vs alternatives. 'delegate' vs 'delegate_custom' distinction is stated but lacks guidance on decision criteria. No mention of performance characteristics, cost, or latency.
Error messages are agent-facing but lack structured recovery guidance. describeError() returns text strings; no categorization of retryable vs user-fixable vs fatal errors. LLM cannot programmatically decide next action.