ekursy-mcp-py
This MCP server enables AI tools to interact with the eKursy (Moodle-based Polish university) platform, providing access to student academic data and course materials:
Get User Profile (
get_user_profile): Fetch the authenticated student's profile information, including their USOS number.List Courses (
list_courses): Retrieve a full list of all courses the student is enrolled in.Get Course Content (
get_course_content): Access detailed content for a specific course, including page sections, presentations, lecturer names, assignments, and files.Get Course Grades (
get_course_grades): Fetch the hierarchical gradebook for a specific course.Resolve Material Link (
resolve_material_link): Download and parse internal university files (PDFs, images) by specifying a resource ID and kind (e.g.,resource,assign).Resolve Proxy (
resolve_proxy): Download and parse internal university proxied content (PDFs, images, URLs, etc.) using a proxy page fragment path.
Provides tools for accessing student profile information, course lists, course grades, page contents, and course materials (PDF/images) from the eKursy (Moodle-based) platform.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ekursy-mcp-pyshow my grades for this semester"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
eKursy Python MCP Server (ekursy-mcp-py)
A Model Context Protocol (MCP) server written in Python using FastMCP, which integrates with the ekursy-zero Rust scraper to expose student profile information, course lists, course grades, page contents, and course materials (PDF/images) from the eKursy platform to AI tools.
Prerequisites
Before running the server, ensure you have:
Git installed on your system.
Docker installed on your system
Python installed on your system
Related MCP server: Canvas MCP
Installation & Setup
Method 1: Automatic Setup Script for Antigravity (Recommended)
If you dont use antigravity this won't work for you. See manual methods below or ask your AI agent
This repository includes a cross-platform setup script that automatically initializes git submodules, prompts you for credentials to create the .env file, and configures the Gemini / Antigravity integration file for you.
Windows: Run
scripts\setup.bat(Double-click or run in terminal:.\scripts\setup.bat)macOS / Linux: Run
./scripts/setup.sh(orbash scripts/setup.sh)
The script will configure MCP in Antigravity and start the server in docker. You only need to restart Antigravity and this MCP server should work
Alternative/Manual Methods
1. Initialize Submodule & Credentials Manually
If you prefer not to use the setup script:
git submodule update --init --recursiveAnd manually create a .env file in the root directory:
MOODLE_USERNAME="your.email@student.put.poznan.pl"
MOODLE_PASSWORD="your_moodle_password"
MCP_TRANSPORT="streamable-http" # optional: defaults to streamable-http when running using docker compose, set to stdio to run locallyHow to Run
Option A: Run via Docker Compose
This runs both the ekursy-zero scraper backend and ekursy-mcp-py server together. The scraper remains private and isolated inside the container network (ports are not exposed to the host).
By default, Docker Compose runs the MCP server in streamable-http mode. If you need to configure the transport type, you can set MCP_TRANSPORT in your .env file (e.g., MCP_TRANSPORT=stdio or MCP_TRANSPORT=streamable-http).
File Downloads & Shared Volumes
When running via Docker Compose, the host's ./downloads directory is mounted to /app/downloads in the container.
The environment variable
HOST_DOWNLOADS_DIRis set indocker-compose.ymlas${PWD}/downloads.When an MCP tool calls
save_resource(e.g. download PDF or images), the file is saved inside this volume. The server usesHOST_DOWNLOADS_DIRto report the exact absolute host path back to the MCP caller so you know exactly where to locate the file on your machine.
Run the following command:
docker compose up --buildThe MCP server will start on HTTP port 6969 (if using streamable-http mode). You can verify it by reaching the MCP endpoint:
http://localhost:6969/mcp
Option B: Run Locally
To run the server locally using the standard stdio transport:
uv run src/main.pyNote: By default, running the script directly uses stdio transport. You can force it to run as a local HTTP server by setting the MCP_TRANSPORT environment variable: MCP_TRANSPORT=streamable-http uv run src/main.py (which runs on port 6969 or the port specified in PORT).
Manual Integration with Antigravity / Gemini MCP
To manually connect this Python MCP server to your Antigravity environment:
Locate the configuration file on your system (e.g.,
C:\Users\Marcin\.gemini\config\mcp_config.jsonorconfig.json).Add a new server entry inside the
mcpServersobject.
Recommended Config (Docker / Streamable HTTP Server)
Add the following snippet to your configuration block:
{
"mcpServers": {
"ekursy-mcp-py": {
"serverUrl": "http://localhost:6969/mcp"
}
}
}Note: Ensure the MOODLE_API_BASE env variable points to the scraper service instance (e.g. http://localhost:8080 if running ekursy-zero locally/standalone).
Alternative Config (Local stdio Server)
If you prefer to run the server locally using the standard input/output (stdio) transport:
Add the following snippet to your configuration block (make sure to replace C:\\path\\to\\ekursy-mcp-py with the absolute path to your cloned repository, and update the environment variables):
{
"mcpServers": {
"ekursy-mcp-py-stdio": {
"command": "uv",
"args": [
"run",
"src/main.py"
],
"cwd": "C:\\path\\to\\ekursy-mcp-py",
"env": {
"MOODLE_USERNAME": "your.email@student.put.poznan.pl",
"MOODLE_PASSWORD": "your_moodle_password",
"MOODLE_API_BASE": "http://localhost:8080",
"MCP_TRANSPORT": "stdio"
}
}
}
}Note: Ensure the MOODLE_API_BASE env variable points to the scraper service instance (e.g., http://localhost:8080 if running ekursy-zero locally/standalone). The MCP_TRANSPORT is optional and defaults to stdio when running locally.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/markrz-0/ekursy-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server