MCP server for managing users and todos with HTTP transport, featuring tools for user creation/fetching, resources for data access, prompts for todo/user operations, and sampling capabilities
emi_mcp_server has fundamental definition quality issues across all three tools. Two of three tools have descriptions under 20 characters or missing parameter descriptions entirely. The fetch-users tool has a severely flawed schema that declares ALL parameters as required when they should be optional search filters. Parameters lack descriptions explaining their purpose. Schema documentation is minimal. Tool naming follows verb conventions but lacks clarity about what distinguishes tools. Error handling is minimal, both tools catch exceptions and return generic error messages ('Error: failed to save user', no guidance on recovery). No output schemas are documented. The create-random-user tool has zero parameters but no explanation of what 'random' means or how users are generated. This server falls well below production baseline for tool definition quality.
this function will create a random user in the users database
create a new user in the database
use this tool to extract users from the database
fetch-users declares all parameters (name, email, phone) as REQUIRED, but semantically these should be optional search filters. This creates a broken search interface, LLMs cannot search by a single field without providing dummy values for the others. Schema does not match use case.
No parameter descriptions across all three tools. Parameters like 'name', 'email', 'phone', 'address' lack descriptions explaining format expectations (e.g., is phone E.164? Is email validated?), min/max length, or valid value sets. LLMs cannot infer constraints from names alone.
Output schemas are not documented. Tools return text-wrapped JSON or generic text messages. LLMs cannot plan downstream calls or extract the right fields. No field-level documentation of what get_user returns, what create_user returns (beyond 'Success'), or what structure fetch_users returns.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Error handling is generic and non-actionable. Both create-user and fetch-users catch exceptions and return 'Error: failed to save user' or similar. These messages do not tell the LLM what went wrong, whether to retry, or what the next step should be. No error classification (retryable, user-fixable, fatal).
create-random-user has no visible description in source. Without it, LLM cannot determine when to invoke this tool or what 'random' means (are fields generated? from a seed? from predefined sets?).
No pagination in fetch-users. Results are returned as a single JSON blob without limit, offset, or next_cursor. Large result sets blow the context window. Tool description does not state result limit.
Server implements server-initiated Sampling (create-random-user is in 'src/sampling/'), which is deprecated as of 2026-07-28. Sampling should be integrated directly with the LLM provider API, not delegated to the MCP server.
Tool annotations contain incorrect hints. create-user has destructiveHint: false, but creating a user IS destructive (modifies state). fetch-users has idempotentHint: false, but searches should be idempotent (same query = same results).