Django REST Framework with Model Context Protocol integration
This server exposes 10 tools with mixed quality. All tools have names, descriptions, and schemas visible in mcp_view.py and mcp_usage_example.py. However, descriptions are minimal (many under 50 chars), parameter descriptions lack detail (most are single-word like 'username field', 'email field'), and there is no output schema documentation. The tools follow a verb_noun naming pattern which is good, but descriptions are generic and often passive ('List User in users' rather than action-oriented guidance). No error handling guidance is visible. Security is a concern: password parameters are exposed, there is no documentation of permissions or audit trails, and the implementation appears to accept credentials via HTTP POST without TLS enforcement visible. Schemas are present but parameter descriptions are uniformly generic ('username field', 'email field', these violate the pattern that every parameter needs a description explaining WHAT it controls, not just naming the field). Output structure is not documented, tools return JSON text but the schema is opaque to the LLM. Tool composition is reasonable (CRUD + custom actions), but no pagination limit is enforced (list_users_user accepts page param but no limit param is visible, risking unbounded result sets). The server claims HTTP transport but no Streamable HTTP or SSE structure is evident in the code snippet, the implementation uses Django HttpResponse which suggests simple HTTP polling, not event-driven MCP.
Custom action: activate
Custom action: active
Create User in users
Custom action: deactivate
Destroy User in users
List User in users
Retrieve User in users
Check system health status
Update User in users
Password and credentials exposed as plaintext parameters in create_users_user and update_users_user. Violates secret-injection pattern, credentials in params are logged and appear in traces.
All tool descriptions are 20-40 chars, mostly generic 'Create User in users' format. Does not explain WHAT the tool does, WHEN to use it, or what the response contains. Violates tool-description pattern requiring 10-1024 chars with context for selection.
Parameter descriptions are uniformly generic: 'username field', 'email field', 'first_name field'. Do not explain format, constraints, or when to use. LLMs cannot infer meaning from field names alone. Violates requirement that every parameter needs a description explaining WHAT it controls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 39 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 31 | - | v1 |
Get user statistics and metrics
No output schemas documented for any tool. LLMs cannot determine what fields to expect, what types are returned, or what IDs to pass to downstream tools. Violates requirement that tools return structured objects with documented schemas.
destroy_users_user performs irreversible deletion but description does not warn of consequences. No confirmation mechanism or dry-run option visible. Violates confirmation-request pattern for destructive operations.
list_users_user accepts page param for pagination but no limit param is visible. No documentation of max results per page, total count return, or next_cursor. Violates paginated-result pattern requiring pagination controls and counts.
No permission checks, audit trails, or security scopes documented. Tools expose write and destructive operations without role-based access control or logging of who called what. Violates permission-gate and audit-trail patterns.
active_users_user and deactivate_users_user names are ambiguous or unclear. 'active_users_user' could mean 'list active users', 'activate users', or 'check if user is active'. Description 'Custom action: active' does not disambiguate. Violates naming clarity rule that tool names alone should convey intent.
No error handling guidance documented. Tools return errors but no recovery steps provided. LLMs cannot self-correct from 'User not found' or validation failures. Violates recovery-guide pattern.