Static source inference · medium confidence · evidence: Streamable HTTP
Current-spec patterns detected
Summary
This MCP server exposes 9 tools for student management and URL content fetching. The tools are registered with attributes and basic descriptions, but suffer from significant gaps in schema completeness, parameter documentation, and error handling. Most tools lack comprehensive input parameter descriptions, output schemas are not documented, and error messages are generic. The server follows a basic registration pattern via [McpServerTool] attributes but falls short of production-grade quality. All 9 tools are explicitly defined in source code, so no inference penalty applies.
Misleading description on GetContentsFromUrls ('Gets students with only specified fields'), this tool fetches content from URLs, not student data. Copy-paste error introduces confusion.
Parameter descriptions are minimal or missing. Examples: 'The student ID' (7 chars), 'The major field to filter by' (28 chars). Missing guidance on valid values, constraints, and failure modes.
Document output schemas for all tools in structured JSON Schema format. Example for GetStudentById: { 'type': 'object', 'properties': { 'id': {'type': 'integer'}, 'firstName': {'type': 'string'}, ... }, 'required': ['id', 'firstName', ...] }
Fix the GetContentsFromUrls description: change from 'Gets students with only specified fields' to 'Fetches content from multiple URLs and returns concatenated results'.
Add field validation to GetStudentsWithFields: convert fieldsToInclude to an enum constraint with valid options: ['id', 'firstName', 'lastName', 'dateOfBirth', 'email', 'gpa', 'major', 'age']. Document in the parameter description.
Expand AddStudent error handling: distinguish between 'duplicate ID' (user-fixable, provide existing ID), 'invalid date format' (user-fixable, clarify format as ISO 8601), and 'server error' (retryable). Return structured error objects: { 'error': 'duplicate_id', 'message': 'Student with ID 123 already exists', 'remedy': 'Use a different ID or call GetStudentById(123) to retrieve existing record' }
Add pagination to GetAllStudents, GetStudentsByMajor, GetStudentsWithGpaAbove: introduce 'limit' (default 20, max 100) and 'offset' (default 0) parameters. Return { 'students': [...], 'total': 150, 'offset': 0, 'limit': 20 } to enable multi-page retrieval.
Consolidate GetStudentsWithFields into GetAllStudents as an optional 'fields_to_return' parameter (default: all fields). Remove the separate tool to reduce duplication and decision friction for LLMs.
No error handling guidance. Tools like AddStudent return a plain string success/failure message, but no structured error codes, recovery suggestions, or retry logic are documented.
AddStudent lacks idempotency confirmation. The tool checks for duplicate IDs and rejects, but does not document this constraint or offer a dry-run / confirmation pattern before modifying state.
GetStudentsWithFields accepts a free-form array of field names with no enum constraint. Invalid field names are silently ignored (switch statement falls through). LLM has no way to know valid options.
No pagination support. GetAllStudents returns all students with no limit or offset. Large datasets blow the context window and violate token efficiency best practices.
Tool composition issue: GetStudentsWithFields duplicates GetAllStudents logic but with selective fields. This violates single-responsibility; should be a parameter to GetAllStudents (e.g., 'fields_to_return').
URL tools (GetContentFromUrl, GetContentsFromUrls) expose no timeout, retry, or rate-limit constraints. External HTTP calls can hang indefinitely, blocking agent execution.
GetContentFromUrlGetContentsFromUrls
Add timeout and retry guidance to GetContentFromUrl and GetContentsFromUrls descriptions: 'HTTP requests timeout after 10 seconds; if timeout occurs, retry once with exponential backoff. Returns empty string on failure instead of throwing an exception.' Consider a per-URL timeout parameter.
Add idempotency support to AddStudent: introduce an 'if_exists' parameter (enum: ['error', 'skip', 'update']) to handle duplicate IDs gracefully. Document: 'if_exists=error (default): reject duplicates; if_exists=skip: silently return existing ID; if_exists=update: replace existing student record.'
Expand parameter descriptions to 50+ characters with explicit constraints. Example: Instead of 'The minimum GPA threshold', write: 'Minimum GPA threshold (0.0 - 4.0; float). Only students with GPA >= minGpa are returned. Decimal precision: up to 2 places (e.g., 3.75 is valid; 3.756 is rounded).'
Document the Student response object structure explicitly: 'Returns a Student object with properties: id (integer), firstName (string), lastName (string), dateOfBirth (ISO 8601 date string), email (string), gpa (number 0.0 - 4.0), major (string).' Include this in tool descriptions or a shared schema reference.