fuxam-student-mcp
# Fuxam Student MCP
Use Codex, Claude, and other local MCP clients to explore your Fuxam modules, learning units, progress, schedule, and semester options.
The server runs on your computer and talks directly to Fuxam. It gives the agent useful source facts and composable tools instead of trying to choose a semester for you.
## Let your agent set it up
Copy this prompt into a new chat with Codex or Claude:
```text
Set up Fuxam Student MCP for me using this documentation:
https://codecampus.tools/docs/fuxam-student-mcp
Detect which supported MCP client I am using and follow only its current instructions. Install the latest public release locally and configure it as a stdio MCP server. Complete every step you can directly, and pause only for a client UI or secret-entry action I must perform.
Never ask me to paste my Fuxam `__client` cookie into this chat, and never print or log it. When the credential is required, tell me exactly how to enter it directly into the client's local MCP configuration or secure installer prompt.
After configuration:
1. Verify the MCP entry exists without displaying the credential.
2. Start the server and confirm its tools are available.
3. Tell me if I need to restart the client or open a new chat.
4. Run one read-only check: show the module categories and learning units I can currently choose from.
Do not book or unbook courses, or join or leave waitlists, during setup.
```
Prefer to install it yourself? Follow the manual steps below.
## Requirements
- A CODE University Fuxam account
- Node.js 26 or newer for command-line installation
- Codex, Claude Code, or Claude Desktop
## Get your Fuxam session cookie
Fuxam's short-lived session tokens are renewed from its Clerk `__client` cookie.
1. Sign in at [fuxam.app](https://fuxam.app) in your browser.
2. Open the browser developer tools.
3. In the application/storage cookie view, select `https://clerk.fuxam.app`.
4. Copy the value of the `__client` cookie.
Treat this value like a password. Do not paste it into chat, commit it, or include it in screenshots.
## Install
### ChatGPT/Codex app and Codex CLI
The installed ChatGPT/Codex app and Codex CLI share the local Codex MCP configuration:
```sh
codex mcp add fuxam \
--env FUXAM_CLERK_CLIENT='<your __client cookie>' \
-- npx -y fuxam-student-mcp
```
Open a new Codex task after adding the server.
### Claude Code
```sh
claude mcp add --scope user \
-e FUXAM_CLERK_CLIENT='<your __client cookie>' \
fuxam -- npx -y fuxam-student-mcp
```
### Claude Desktop
Download the `.mcpb` file from the matching GitHub Release, open it with Claude Desktop, and paste the Clerk cookie when prompted. The bundle runs the same MCP locally and marks the cookie as sensitive configuration.
### Other local MCP clients
Configure a stdio server with this executable and environment variable:
```json
{
"command": "npx",
"args": ["-y", "fuxam-student-mcp"],
"env": {
"FUXAM_CLERK_CLIENT": "<your __client cookie>"
}
}
```
The outer configuration key differs between clients. Use the client's normal local stdio MCP settings.
## Try it
Good first prompts include:
- “Show me the module categories and learning units I can currently choose from.”
- “Help me compare these three modules, including requirements, progress, instructors, dates, and workload.”
- “Look at my study plan and current progress, then help me assemble a realistic semester.”
- “Check whether this proposed set of learning units has scheduling conflicts.”
- “What deadlines and appointments do I have over the next month?”
The agent can browse by category/tag or text, batch-inspect modules and learning units, compare the result with your progress, and check a proposed course set for conflicts.
## Capabilities
Planning and discovery:
- `explore_learning_options`
- `search_fuxam`
- `get_study_plan`
- `list_enrolled_courses`
- `list_bookable_courses`
- `get_learning_unit_details`
- `get_module_details`
- `get_module_attempts`
- `get_exam_details`
Schedule and workload:
- `list_student_appointments`
- `list_course_appointments`
- `list_course_deadlines`
- `list_applicable_excluded_dates`
- `list_todos`
- `list_pinned_courses`
- `get_layer_path`
- `check_course_conflicts`
Account changes:
- `book_course`
- `unbook_course`
- `join_waitlist`
- `leave_waitlist`
The four account-change tools affect your real Fuxam account. They are marked as write operations for MCP clients, and each mutation verifies the resulting Fuxam state. Booking does not silently run a conflict check first.
## How agents should use it
For open-ended planning, start with `explore_learning_options` and `list_enrolled_courses`. Narrow by category or search query, then batch the shortlist through `get_module_details`, `get_learning_unit_details`, and `get_module_attempts`. Check the complete proposed set with `check_course_conflicts` before presenting the tradeoffs.
Identifier names matter:
- course `id` is used for booking, waitlists, and conflict checks;
- `layerId` or `layer_id` is used for appointments and deadlines;
- `courseModuleId` is the stable module ID;
- `moduleVersionId` identifies one curriculum version;
- `organizationTermId` identifies an academic term.
Fuxam import-derived completion totals can occasionally lag behind concrete attempt or `gradedAt` records. Agents should prefer the concrete records when they disagree.
## Troubleshooting
`FUXAM_AUTH_REQUIRED`
: Sign in to Fuxam again, copy the current Clerk `__client` cookie, remove the old MCP entry, and add it again with the new value.
```sh
codex mcp remove fuxam
claude mcp remove --scope user fuxam
```
`FUXAM_UNSUPPORTED_INSTITUTION`
: This release supports the CODE University Fuxam environment.
`FUXAM_CONTEXT_REQUIRED`
: The server could not identify one active cohort and study-program context. Include the full error when opening an issue, but never include your cookie, headers, or raw Fuxam response data.
Partial results
: Some curated reads combine several Fuxam sections. If an optional upstream section is temporarily unavailable, the MCP returns the sections it could retrieve with `partial: true` and identifies what can be retried.
## Privacy
Version 0.1 collects no telemetry. Your Fuxam credential and student data remain on your computer except for direct requests from the local MCP to Fuxam and Clerk. Tool results are sent to the MCP client you chose, subject to that client's own data controls.
## License
Noncommercial use is licensed under the [PolyForm Noncommercial License 1.0.0](LICENSE). Commercial use requires a separate written license from Maximilian Spitzer; contact the author through [GitHub](https://github.com/maximilianspitzer).
## Development
```sh
npm ci
npm run check
npm run test:package
npm run package:mcpb
```
The package smoke test installs the generated npm tarball in a clean temporary directory, negotiates MCP over stdio, lists its tools, and verifies the credential-free startup behavior. Tests never use a live student credential or perform a Fuxam mutation.
## Project status
This is an unofficial student-built client, published with permission from CODE University and Fuxam. Fuxam remains the source of truth for academic records, requirements, availability, and account state.
TDQS
Scored across 21 tools
Each tool has a clearly distinct purpose, ranging from search and listing to booking and waitlist management. Overlaps like list_enrolled_courses vs list_bookable_courses are differentiated by their scope (enrolled vs bookable), and get_learning_unit_details vs get_module_details target different entities.
Most tools follow a verb_noun pattern (list_*, get_*, book_*, unbook_*, join_*, leave_*). Minor inconsistencies exist, such as 'search_fuxam' and 'explore_learning_options' not using the same prefix structure, but the overall naming is coherent and readable.
With 21 tools, the set is fairly large but justified by the breadth of student operations: reading data, booking, waitlists, conflict checking, and scheduling. The count is on the higher end but still within a reasonable range for a comprehensive student management server.
The tool surface covers core student actions: search, list, view details, book/unbook, join/leave waitlists, check conflicts, and access appointments, deadlines, exams, todos, and pinned courses. Minor gaps like a dedicated 'get_student_info' or update operation exist, but the core domain is well represented.