An MCP server for managing employee data in a SQLite database with tools for CRUD operations and analytics
Server has 12 tools with complete input schemas and descriptions. Tool naming follows verb_noun convention (create_employee, find_employee, etc.). Descriptions are present but generic (avg ~60 chars, below 194-char baseline). Parameters have types and descriptions. However, output schemas are not documented, LLMs cannot predict response structure. Error handling returns dict with 'error' or 'message' keys but lacks recovery guidance. Tool annotations are present (readOnlyHint, destructiveHint, idempotentHint) which is good. No pagination support despite list_employees potentially returning many rows. Missing parameter constraints (e.g., salary must be positive). Composition is sound, each tool has one responsibility.
Update an employee's salary using their unique employee ID.
Return a summary of the company's employee and salary statistics.
Add a new employee to the database.
Return the total number of employees in each department.
Return a list of all departments represented in the database.
Return the total number of employees in the database.
Search for employees by name. Returns all matching employees if multiple employees have the same name.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). Responses are inferred from implementation only.
No pagination support on list_employees() and employee_search(). Large result sets will blow context window. Missing limit/offset parameters and total_count in response.
Error responses lack recovery guidance. 'No employee with ID #X was found' tells LLM nothing about next steps. Should suggest 'Try employee_search() or list_employees() to find valid IDs.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Get an employee's information from the database by searching their unique employee ID.
Return the employee with the highest salary.
Return all employees currently in the database.
Delete an employee from the database using their unique employee ID.
Calculate the average salary of all the employees.
Parameter constraints missing. salary parameter has no min/max bounds, LLM could pass negative or absurdly large values. name and department accept any string with no length limits.
Descriptions are generic and under 100 chars (avg ~60). Baseline is 194 chars. Descriptions lack WHEN to use each tool and dependencies. E.g., 'employee_search' should note 'Use this to find employees by name when you don't know their ID. Returns all matches.'