A FastAPI-based MCP server providing tool endpoints for customer support operations including web search, database querying, and Redis caching. Integrates with a support agent that uses the Agents SDK to orchestrate tool calls and generate responses.
This server has significant definition quality gaps. While 9 tools are registered with basic schemas and descriptions, most descriptions are generic and under-optimized for LLM selection. Parameter descriptions are sparse or missing entirely. No output schemas are documented. Tool naming is inconsistent (web_search appears twice with different implementations). Error handling is absent, no recovery guidance, no categorization of retryable vs fatal errors. The redis_cache tool exposes write operations without confirmation or dry-run patterns. No tool annotations (readOnlyHint, destructiveHint) are present despite clear risk distinctions. Schemas exist but lack depth: many parameters have no descriptions, and constraints (enums, ranges, patterns) are missing. This is a D-grade implementation, functional but not production-ready.
Retrieve a cached support answer by key.
Fetch customer profile details for a given customer id.
Execute a read-only database query and return rows.
Fetch the 10 most recent orders for a given customer.
Cache data in Redis with an expiration.
Get data from Redis by key.
Retrieve web search snippets relevant to a customer question.
Duplicate tool name 'web_search' with different implementations (mcp_server/app.py vs app/agent.py). LLMs cannot disambiguate; one will be silently ignored or cause routing errors.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., customer_id from recent_orders response). Violates pattern:tool and pattern:response-shaper.
redis_cache tool (WRITE operation) lacks confirmation/dry-run pattern and has no destructiveHint annotation. Agents can corrupt cache without safeguards. Violates pattern:confirmation-request.
Parameter descriptions are minimal or absent. E.g., db_query 'db_type' has description but no enum of valid values; redis_cache 'ttl' lacks range constraints (1 - 86400?). Violates pattern:constrained-input.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | 2026-07-28+ | v2 |
Simulate web search; in production integrate with an actual search provider.
Perform a web search using Tavily when available; fallback to mock data.
No error handling guidance. Tools return raw errors with no recovery hints. E.g., if db_query fails, LLM has no guidance on whether to retry, check syntax, or call a different tool. Violates pattern:recovery-guide.