FastAPI-based gateway that bridges multiple MCP servers (MSSQL database tools and product search) to Claude, with role-based access control, OIDC authentication, and a React frontend for an internal data assistant chatbot.
Server defines 8 tools with basic descriptions and input schemas. All tools are read-only, which is good for safety. However, descriptions are generic and lack LLM-optimization guidance (e.g., 'Execute read-only SQL queries' doesn't explain WHEN to use this vs describe_table). Parameter descriptions are minimal or absent. Output schemas are not documented. No error handling guidance. Tool naming is clear (verb_noun pattern), but composition could be tighter, execute_sql, list_tables, describe_table, get_schema_overview, and get_table_sample all operate on the same database resource and could benefit from clearer differentiation in descriptions.
Get the schema and column information for a specific table.
Execute read-only SQL queries against the MSSQL database (SELECT only). Never attempts to modify data.
Get an overview of the entire database schema.
Get sample rows from a table to understand its data.
Discover which filter fields and values are available for product search (Brand, Color, Size, Material, etc.).
List all available tables in the MSSQL database schema.
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields without knowing what each tool returns. E.g., does execute_sql return rows as array of objects? Does search_products return product IDs needed for follow-up calls?
Descriptions lack LLM-optimization guidance. Generic descriptions like 'Execute read-only SQL queries' (34 chars) do not explain WHEN to use this tool vs describe_table or get_table_sample. Baseline for A+ tools is 50-200 chars with clear differentiation.
Parameter descriptions missing or minimal. 'query' param in execute_sql has description, but 'limit' in get_table_sample lacks guidance on valid range (1-100? 1-1000?). Baseline: 100% of A+ tools have param descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2025-06-18+ | v2 |
Search the product catalog with attribute filters (Brand, Color, Size, Material, etc.). Returns product results with visual cards (image, name, stock, attributes, link).
Quick typeahead/name lookup for products in the catalog.
No error handling guidance. If execute_sql fails (syntax error, timeout, permission denied), the response does not tell the LLM what to do next. Baseline: error responses must categorize as retryable/user-fixable/fatal and suggest recovery steps.
Tool composition overlap. Five tools (execute_sql, list_tables, describe_table, get_schema_overview, get_table_sample) all query the same database. Descriptions do not clarify when to use each. E.g., should an LLM call describe_table or execute_sql 'SELECT * FROM table LIMIT 1'?