Access your FLEX Student Portal data - attendance, marks, transcript, courses, and fees
This MCP server has 8 tools with mixed quality. Naming is generally acceptable (verb_noun pattern), but descriptions lack LLM-optimized structure and depth. Parameter schemas are present but minimalist, most lack enums, constraints, and format guidance. Output schemas are almost entirely undocumented, making it difficult for LLMs to plan chained calls. Error handling is absent from all tool definitions. The server uses environment-variable-based credentials (good), but lacks permission gates, audit trail declarations, and rate-limiting guidance. No tool annotations present. Overall, this reads like a functional wrapper around FLEX API endpoints but falls short of production-grade agent tooling.
Check if currently logged in to FLEX portal. Returns: Dictionary with logged_in status and cookies_count.
Get attendance data for all courses. Args: semester_id: Optional semester ID (e.g., '20253' for Fall 2025). Format: YYYY + (1=spring, 2=summer, 3=fall) Returns: Dictionary with courses containing: - course_code, course_name, section - attendance_percentage - lectures (list with date, presence P/A)
Get registered courses for current semester. Returns: Dictionary with courses containing: - code, name, section, credits, instructor
Get consolidated fee report with payment history. Returns: Dictionary with: - payments: List of payment records with semester, amount, challan_no, due_date, payment_date, status - pending: List of pending fee items
Get marks/grades for all courses. Args: semester_id: Must give semester ID (e.g., '20253' for Fall 2025). Format: YYYY + (1=spring, 2=summer, 3=fall), Only works for latest years Only works for latest years can't access old years marks Returns: Dictionary with courses containing: - course_code, course_name, section - assessments (Assignment, Quiz, Sessional-I, etc.) - Each assessment has: number, weightage, obtained_marks, total_marks, average - total absolutes can be calculated by adding the Total of weightages for different assessments
No documented output schemas for any tool. LLMs cannot infer what fields to expect or what IDs are needed for downstream chaining. For example, get_transcript returns 'Dictionary with: student_info, semesters, courses...' but no field-level schema. This violates the pattern:tool and mxe:include-chaining-ids patterns.
Parameters lack enums and format constraints. semester_id accepts a string with format 'YYYY + (1=spring, 2=summer, 3=fall)' but is not formally constrained. This invites hallucinated values from LLMs (e.g. '2025-spring' or 'fall2025'). Should use enum or regex pattern constraint.
No error handling guidance in any tool definition. How should an LLM handle login failures, API timeouts, or student not found? No error classification (retryable vs fatal) provided. Violates pattern:recovery-guide.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Get Modified Class Average (MCA) for a course. MCA is used for relative grading in courses (mostly electives). The offer_id can be obtained from get_transcript() for courses where has_mca is True. Args: offer_id: The course offer ID (e.g., "15202230205") Returns: Dictionary with grading scheme and MCA value.
Get full academic transcript with all semesters. Grading System: - Core courses: Use absolute grading (fixed grade boundaries) - Elective courses: Use relative grading with MCA (Modified Class Average) - Courses with has_mca=True have an offer_id to fetch MCA details Returns: Dictionary with: - student_info: ARN, Roll No, Name, Batch - semesters: List with each semester containing: - name, credits_attempted, credits_earned, cgpa, sgpa - courses: code, name, grade, credit_hours, points, type, offer_id, has_mca - cgpa: Final cumulative GPA
Login to FLEX Student Portal. Opens a browser window for automatic reCAPTCHA handling. Credentials are read from FLEX_ROLL_NO and FLEX_PASSWORD environment variables. Returns: Success or failure message.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are READ_ONLY per the manifest, but this is not communicated to the MCP protocol via tool annotations. Modern spec expects annotation support.
Description quality is inconsistent and sometimes too technical. E.g., get_transcript mentions 'MCA (Modified Class Average)' and 'has_mca=True' without explaining why an agent would care or when to call it. Descriptions should be prompt-engineered to guide LLM selection per pattern:tool-description.
No pagination support declared for list/get tools. get_courses, get_attendance, get_marks all return potentially large result sets with no mention of limits, pagination tokens, or count returns. Violates pattern:paginated-result.
login tool requires environment variables FLEX_ROLL_NO and FLEX_PASSWORD but the description does not mention this prerequisite. An agent calling login without these set will fail with a cryptic ValueError. Description should state: 'Requires FLEX_ROLL_NO and FLEX_PASSWORD env vars to be set.'
No tool composition guidance. For example, to get a student's full transcript and then fetch MCA for electives, an agent must infer that get_transcript returns offer_id and pass it to get_mca. This dependency is documented in get_mca's description but not discoverable from get_transcript's return schema. Include chaining IDs per mxe:include-chaining-ids.