An MCP-style academic advising system that processes student transcripts, course catalogs, and major requirements to generate graduation plans and answer academic questions using LLM-powered RAG pipelines.
This is not an MCP server. The codebase is a Flask/Node.js/React full-stack application for academic advising, not an MCP-compliant tool server. Tools are scattered across Python files (main.py, graphExperiment.py, graduationFlowchart.py) and a Node.js Express backend (server.js) with no MCP protocol implementation visible. No tool registration via MCP, no JSON-RPC transport, no _meta/capabilities negotiation. Tool definitions are inferred from function signatures and docstrings, not formally registered. Descriptions are present but often generic (e.g., 'Processes a student's What-If report'). Input schemas are minimal, most tools accept only a single string parameter with no type validation or enum constraints. Output schemas are undocumented. Error handling is absent. Security concerns: register() and login() tools expose authentication logic as callable endpoints without clear permission gates. No audit logging visible. This is a domain application, not an MCP server.
Aggregates student record and major requirement information to generate a grounded academic advising response, including graduation plans, course recommendations, and semester-wise scheduling.
Builds an indexed catalog of course codes from a list of catalog codes, creating both an exact set and a base-code mapping for efficient course code resolution and matching.
Builds a directed graph of courses and their prerequisite relationships from a CSV file, enabling prerequisite chain analysis and course sequencing.
Formats prerequisite and concurrent course information for a course into a human-readable summary string.
Retrieves prerequisite information for a given course from the course graph, including enforced prerequisites and concurrent course requirements.
Retrieves all course codes associated with a specific major from the major requirements CSV, including prescribed courses and additional courses.
Not an MCP server. No MCP protocol implementation detected. Tools are not registered via MCP; no JSON-RPC transport, no _meta/capabilities, no tool schema registry. This is a Flask/Node.js application, not an MCP-compliant tool server.
Input schemas are minimal and incomplete. Most tools accept only a single string parameter (user_question, query, etc.) with no type validation, enum constraints, or format specifications. No output schemas documented anywhere.
Authentication tools (register, login) exposed as callable endpoints without explicit permission gates or role-based access control. No audit logging of who called what. Credentials passed in plaintext parameters (password field visible in register schema).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 29 | 2026-07-28+ | v2 |
Returns the health status of the server and database connection.
Loads a prerequisite map from a courses CSV file, mapping each course to its list of prerequisite courses.
Authenticates a user by email and password, returning a JWT token and user information if credentials are valid.
Returns the authenticated user's profile information from the JWT token.
Retrieves relevant Penn State course information from the processed course catalog based on a user question, returning course details including major requirements, prescribed courses, additional courses, and selectable courses.
Processes a student's What-If report (PDF transcript) to extract and summarize academic records including completed courses, in-progress courses, satisfied requirements, unmet requirements, credit totals, major/minor signals, and missing information.
Registers a new user (student, faculty, or admin) in the system with name, email, password, role, sex, and date of birth. Requires admin authentication.
Executes a web search pipeline to find current academic policy information, course details, or institutional facts when local knowledge is insufficient.
Executes a three-stage orchestration pipeline for academic advising: (1) classify the question type, (2) retrieve relevant context, (3) generate a grounded response.
Initializes the LLM environment by loading environment variables, processing uploaded transcript PDFs, setting up LLM instances, and building vector stores for PDF retrieval and course catalog retrieval.
Tool descriptions are generic and lack actionable context. Most are 40 - 60 characters and do not explain WHEN to use the tool, WHAT it returns, or HOW it differs from similar tools. No dependency hints or recovery guidance.
No error handling or recovery guidance. Tools do not return structured error responses with actionable next steps. No distinction between retryable, user-fixable, and fatal errors.