A simple MCP server demonstrating tools, resources, and prompts with database integration
Server has 5 tools with basic schemas and descriptions, but significant gaps prevent production use. All tools have descriptions (10-30 chars, below the 50-200 char baseline for LLM optimization) and input schemas with type info. However, descriptions are generic and lack context about WHEN to use each tool or what happens on error. Parameter descriptions are minimal (e.g., 'First number' for 'a'). No output schemas documented. No error handling guidance. Database tools (list_users, find_user) return unstructured text instead of structured JSON. No tool annotations (readOnlyHint, destructiveHint). Naming is verb-noun compliant but descriptions fail to meet the 'WHAT, WHEN, WHY' standard required for LLM selection.
Add two numbers.
Find a user by name from the database.
Greet someone by name.
List all users from the database.
Multiply two numbers.
Descriptions are too short (10-30 chars) and lack LLM-optimized context. Baseline is 50-200 chars. 'Add two numbers.' does not explain WHEN to use this vs multiply_numbers, or what happens on error.
Parameter descriptions are minimal or missing context. 'First number' for parameter 'a' does not explain range, format, or constraints. Baseline: 72 chars per param description.
Database tools (list_users, find_user) return unstructured text strings instead of structured JSON objects. LLMs cannot reliably parse 'ID: 1 | Name: Alice | Role: ML Engineer | Skills: PyTorch, LangChain, RAG' for downstream tool calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
No output schemas documented. LLMs cannot plan downstream calls or extract structured data. All tools return strings; no type info provided.
No error handling guidance. If find_user('Unknown') returns 'User not found', the LLM has no recovery path. Should suggest 'Try list_users() to see available names' or return structured error with alternatives.