A local AI provider MCP server that exposes multiple MCP servers for inference delegation, administrative model lifecycle operations, and read-only operational visibility. Includes an OpenAI-compatible edge server for loopback-only inference.
Strong naming conventions (verb_noun pattern: load_model, unload_model, delegate, health, etc.). Descriptions are detailed and contextual, notably, local_ai_delegate includes extensive guidance on model limitations and when NOT to use it. All 11 tools have descriptions (10 - 500 chars, within baseline 10 - 1024). Input schemas present for all tools with proper JSON Schema structure. However, some parameter descriptions lack specificity (e.g., 'stable local model ID; required' could specify format/constraints). Output schemas are not documented in the source provided. Error handling guidance is implicit in descriptions but not formalized. Tool annotations (destructiveHint, readOnlyHint) are correctly applied per risk classification.
Report the active local model, if the router exposes one, without changing model state.
Read admission capacity and queue occupancy for the configured local model profile.
Delegate one stateless text task to the pinned local model. Use this tool only when the user explicitly asks you to use, consult, or delegate to the local model or local AI server; never invoke it merely because local AI is available. The pinned model is a small (9B) executor, best suited to one well-specified, self-contained subtask at a time (a single function, a focused explanation, a review of a short snippet). It has no file, tool, or execution access and cannot verify what it writes. When asked to satisfy several interacting requirements in one call (for example: concurrency plus multiple features plus tests), it reliably produces plausible-looking code with real correctness bugs (race conditions, inverted comparisons, unhandled cases, unimplemented features). Prefer several narrow calls over one broad one, and verify or execute the result yourself before relying on it.
Stop admitting new local inference so the provider can be updated. Requests already running or queued are allowed to finish; nothing is cancelled.
Output schemas not documented. Tools return data but LLMs cannot plan downstream calls without knowing response structure (e.g., what fields does local_ai_models return? Is it {models: [{id, name, size}]} or {model_ids: []}?).
Parameter descriptions lack format/constraint specificity. 'model_id' is described as 'stable local model ID; required' but does not specify format (alphanumeric? UUID? max length?). LLMs cannot validate or construct valid IDs without explicit constraints.
No error recovery guidance. Tools like local_ai_delegate and local_ai_load_model may fail (model not found, inference timeout, out of memory) but descriptions do not explain what to do next or which errors are retryable.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Read side-effect-free liveness and readiness for the local AI provider.
Load an explicitly selected local model. This changes provider state but is non-destructive and idempotent.
List the stable local model IDs published by the provider without loading a model.
Read newest sanitized request metadata. Prompts, responses, headers, and credentials are never returned.
Return the local provider to normal admission after maintenance. This is idempotent and never loads a model.
Switch explicitly to a selected local model. This may unload another model and is idempotent.
Unload an explicitly selected local model. This destructive state change is idempotent.
local_ai_delegate description is excellent but very long (~500 chars). While informative, it risks token waste. Consider splitting into a concise summary + a separate 'limitations' or 'best_practices' field if the protocol supports it.
No pagination or result limits documented for local_ai_recent_events. The 'limit' parameter defaults to 20 and caps at 100, but the description does not explain what happens if more events exist or how to iterate.