A .NET-based MCP server that routes incoming intents to registered skills, with support for context building, rule validation, middleware, and skill execution orchestration.
Critical failures across all dimensions. The server exposes a single catch-all tool 'dynamic_skill_tools' that routes to dynamically registered skills. Tool definition is inferred rather than explicitly registered, skill names, descriptions, and schemas are determined at runtime by ISkill implementations, not visible in static code. The tool itself has a generic name ('dynamic_skill_tools'), lacks verb-action clarity, and accepts a raw 'parameters' object with no schema constraints. Input schema is present but overly generic (tool_name: string, parameters: object with no type info). No parameter descriptions explain what 'parameters' should contain or how it maps to skill InputSchema. No output schema documented. Error handling is absent, no guidance on what happens when a skill is not found, fails, or times out. The architecture delegates all tool semantics to runtime skill registration, making static quality assessment impossible and violating the principle that tool definitions should be self-documenting.
The Skill Engine exposes registered skills as MCP tools. Each skill is dynamically registered and exposed via the /mcp/tools endpoint. Skills are routed by exact name match (case-insensitive) or fuzzy keyword matching. The actual tools depend on registered ISkill implementations.
Tool definition is inferred at runtime, not statically registered. Skill names, descriptions, and input schemas are determined by ISkill implementations registered at startup, not visible in MCP tool manifest. This violates the principle that tool definitions must be self-documenting and discoverable.
Tool name 'dynamic_skill_tools' is generic and lacks action verb. Does not follow verb_noun convention (e.g., 'invoke_skill', 'execute_skill'). LLMs cannot infer intent from the name alone.
Parameter 'parameters' is typed as 'object' with no schema constraints, type info, or description of expected structure. LLMs cannot validate input or understand what fields are required. Violates constrained-input pattern.
No output schema documented. LLMs cannot plan downstream tool calls or extract structured data from skill results. Violates response-shaper pattern.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 31 | <=2025-11-25 | v2 |
No error handling guidance. Tool description does not explain what happens when a skill is not found, execution fails, or times out. No recovery hints for LLM.