QNA Action MCP Server - A knowledge base search and ticket creation server with intent-based tool routing
This server has two tools with visible schemas and descriptions, but significant quality gaps prevent a higher score. The search_knowledge tool has a reasonable schema with enum constraints for intent, but the create_ticket tool uses z.any() for its primary input, which violates schema discipline entirely. Descriptions are present but generic and lack detail about when to use tools or what they return. Parameter descriptions are minimal. The 'intent' parameter appears in both tools but its enum is dynamically loaded from config (INTENT_NAMES), while this is flexible, it's not discoverable from static analysis of the schema alone. Error handling exists but provides minimal guidance to the LLM about recovery paths. The server uses Zod for validation (good practice) but does not leverage outputSchema fully, the search_knowledge tool returns structuredContent but most tools do not document their output structure clearly.
Create a ticket for the users query
Search knowledge base for relevant documents
create_ticket uses z.any() for ticket parameter, no schema validation or LLM guidance on ticket structure
Parameter descriptions are minimal or absent. 'intent' parameter in both tools lacks explanation of its role or when it should be used
Tool descriptions lack guidance on when to use each tool, what prerequisites exist, and what the LLM should do with results
search_knowledge returns structuredContent with text field, but LLM does not know whether to expect raw text, markdown, or structured metadata in responses
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 39 | - | v1 |
Error messages are generic ('Error searching knowledge base', 'Error when creating ticket') without guidance on recovery or LLM next steps
create_ticket does not document that it modifies state (irreversible write), making it unsafe for agents to call without confirmation
Dynamic intent enum (INTENT_NAMES from config) is not visible in static schema, LLMs cannot discover valid intent values without reading the resource