Generative AI-powered Multi-Agent Customer Support System with MCP server exposing agent capabilities as tools for querying customer data, policy documents, and routing support requests
Server has 5 tools with basic descriptions but critical gaps in schema documentation, parameter descriptions, and error handling. Tool names are reasonable (verb-noun pattern), but input schemas are not visible in the provided code, only parameter names and types are inferred from docstrings. No output schemas documented. Error handling is minimal (generic exception messages). The ask_support_assistant tool is overly broad (combines routing logic). upload_policy_document and safe_sql_query lack input validation guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. Descriptions are present but generic (34 - 194 chars, below the 50 - 200 char LLM-optimized baseline). This server would not pass code review by a principal tool engineer.
Ask the AI support assistant a question. It automatically determines whether to search the customer database, policy documents, or both, and returns a comprehensive answer.
Get statistics about the current knowledge base (number of indexed document chunks).
Execute a SQL query against the database and get back the result. If the query is not correct, an error message will be returned. If an error is returned, rewrite the query, check the query, and try again.
Search through uploaded policy documents to find relevant information. Use this tool when the user asks about company policies, procedures, terms of service, refund policies, privacy policies, or any other information that would be found in official company documents.
Upload and index a PDF policy document into the knowledge base.
Input schemas not visible in source code. Only parameter names and types are inferred from docstrings. No explicit JSON Schema definitions with type, description, enum, or constraint metadata found. This violates the pattern:constrained-input and pattern:tool-description requirements.
Output schemas not documented. No description of what fields are returned, their types, or structure. LLMs cannot plan downstream tool calls or extract data without knowing the response shape.
Error handling is generic and non-actionable. Exceptions return raw error strings (e.g., 'Error indexing document: {str(e)}') without recovery guidance. LLMs cannot determine if errors are retryable, user-fixable, or fatal.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2026-07-28+ | v2 |
safe_sql_query accepts arbitrary SQL with no input validation or injection prevention. Description says 'If an error is returned, rewrite the query' but provides no guidance on SQL injection risks or safe query patterns. Violates pattern:tool-gateway.
ask_support_assistant combines routing, SQL querying, and RAG into one tool. This violates the single-responsibility principle (pattern:tool). The agent cannot compose these concerns independently or retry individual steps.