eClass MCP Server
eClass MCP 服务器
特征
身份验证:通过 UoA 的 CAS SSO 身份验证系统登录 eClass
课程管理:检索已注册课程列表
会话管理:在工具调用之间维护经过身份验证的会话
状态检查:验证身份验证状态
Related MCP server: mcpUPB
项目结构
该项目采用模块化架构,以提高可维护性:
eclass-mcp-server/
├── run_server.py # Entry point script for running the server
├── pyproject.toml # Project configuration and dependencies
├── .env # Environment variables (create from example.env)
├── src/
└── eclass_mcp_server/ # Main package
├── __init__.py # Package initialization
├── server.py # Core server implementation and tool handlers
├── authentication.py # Authentication functionality
├── course_management.py # Course-related functionality
├── html_parsing.py # HTML parsing utilities
└── test/ # Test scripts for functionality verification
├── __init__.py
├── test_login.py
├── test_courses.py
└── run_all_tests.py安装
使用 UV 安装服务器(推荐):
# Clone the repository
git clone https://github.com/yourusername/eClass-MCP-server.git
cd eClass-MCP-server
# Install dependencies
uv sync --dev --all-extras或者,使用 pip 安装:
pip install -e .配置
在根目录中创建一个具有以下配置的.env文件(或复制并重命名提供的example.env文件):
ECLASS_URL=https://eclass.uoa.gr
ECLASS_USERNAME=your_username
ECLASS_PASSWORD=your_password所有凭证都必须在 .env 文件中提供。服务器不接受凭证作为参数。
用法
终端
使用入口点脚本运行服务器:
python run_server.py或者作为模块:
python -m src.eclass_mcp_server.server光标
前往“设置”->“MCP”。点击Add new MCP server :
选择一个唯一但合适的名称,以便代理知道服务器的用途(例如“eClass 服务器”)
选择“类型”上的
command选项在命令输入中添加:
python /path/to/eclass-mcp-server/run_server.py
此命令运行run_server.py脚本,该脚本将 MCP 客户端与server.py中的主服务器入口点连接起来。
克劳德桌面
与 Claude Desktop 一起使用:
打开 Claude 桌面
转至“设置”>“服务器”
添加具有以下详细信息的新服务器:
名称:eClass MCP
命令:run_server.py 脚本的路径
单击“添加服务器”
与 Claude 聊天时从下拉菜单中选择服务器
工具
该服务器提供以下工具供 MCP 客户端使用:
登录
使用 SSO 身份验证登录 eClass。
{
"random_string": "any_value"
}获取课程
检索已注册课程的列表(需要先登录)。
{
"random_string": "any_value"
}登出
从 eClass 注销。
{
"random_string": "any_value"
}授权状态
检查当前身份验证状态。
{
"random_string": "any_value"
}测试
该项目包括用于验证功能的测试脚本:
# Run all tests
python -m src.eclass_mcp_server.test.run_all_tests
# Run specific tests
python -m src.eclass_mcp_server.test.test_login
python -m src.eclass_mcp_server.test.test_coursesMCP 客户端使用示例
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
import asyncio
async def run_agent():
server_params = StdioServerParameters(
command="python /path/to/eclass-mcp-server/run_server.py",
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the session
await session.initialize()
# Login to eClass
login_result = await session.call_tool("login", {
"random_string": "dummy"
})
print(login_result)
# Get courses
courses_result = await session.call_tool("get_courses", {
"random_string": "dummy"
})
print(courses_result)
# Logout
logout_result = await session.call_tool("logout", {
"random_string": "dummy"
})
print(logout_result)
if __name__ == "__main__":
asyncio.run(run_agent())与AI代理集成
此 MCP 服务器旨在与支持模型上下文协议 (MCP) 的 AI 代理配合使用。这使得 AI 系统能够直接与 eClass 交互,从而实现以下功能:
检索课程信息
查看课程公告
获取课程材料
提交作业(未来功能)
安全注意事项
服务器处理敏感的身份验证凭据
凭证仅用于身份验证,不会持久存储
会话 cookie 在服务器的生命周期内保存在内存中
服务器在执行操作之前验证会话状态
带有凭证的
.env文件永远不应提交到版本控制(它包含在 .gitignore 中)
执照
MIT 许可证
贡献
欢迎贡献代码!欢迎提交 Pull 请求。
Available Tools
4 toolsauthstatusB
Check authentication status with eClass
| Name | Required | Description | Default |
|---|---|---|---|
| random_string | Yes | Dummy parameter for no-parameter tools |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the purpose without disclosing behavioral traits such as whether it requires authentication, what the response format is, or any rate limits. For a tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It's appropriately sized and front-loaded, making it easy to understand immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., success/failure, user details) or any behavioral context, which is necessary for an authentication-related tool with no structured data support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, so the schema fully documents the single parameter. The description doesn't add any parameter information, which is acceptable since the schema handles it. With 0 parameters of real semantic weight (the parameter is a dummy), a baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as 'Check authentication status with eClass', which is a specific verb ('Check') and resource ('authentication status') combination. It doesn't explicitly distinguish from siblings like 'login' or 'logout', but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'login' or 'logout'. The description states what it does but offers no context about when it should be invoked or what scenarios it addresses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_coursesB
Get list of enrolled courses from eClass
| Name | Required | Description | Default |
|---|---|---|---|
| random_string | Yes | Dummy parameter for no-parameter tools |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions retrieving a list but doesn't specify whether this requires authentication, what format the list is in, if there are rate limits, or any error conditions. For a read operation with zero annotation coverage, this leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's front-loaded with the core purpose ('Get list of enrolled courses from eClass'), making it easy to understand immediately. Every word earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and a simple read operation, the description is incomplete. It lacks details on authentication requirements, return format, error handling, or any behavioral context. For a tool that likely interacts with an eClass system, this leaves too many unknowns for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter (random_string) with 100% description coverage, indicating it's a dummy parameter for no-parameter tools. The description doesn't add any parameter details beyond the schema, but since this is effectively a zero-parameter tool (with a dummy parameter), the baseline is 4 as it doesn't need to compensate for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get list') and target resource ('enrolled courses from eClass'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools (authstatus, login, logout) which are unrelated authentication tools, so this distinction isn't needed but the purpose remains clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. While the sibling tools are unrelated (authentication vs. data retrieval), there's no explicit mention of prerequisites like needing to be logged in or any context for usage. It simply states what it does without usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loginB
Log in to eClass using username/password from your .env file through UoA's SSO. Configure ECLASS_USERNAME and ECLASS_PASSWORD in your .env file.
| Name | Required | Description | Default |
|---|---|---|---|
| random_string | Yes | Dummy parameter for no-parameter tools |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions authentication via SSO and .env file usage, but lacks details on what the tool actually does (e.g., establishes a session, returns tokens, handles errors) or behavioral traits like rate limits, side effects, or response format. For a login tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that efficiently convey the core functionality and configuration requirement. It's front-loaded with the main action and wastes no words, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a login operation (authentication, session management) with no annotations and no output schema, the description is incomplete. It doesn't explain what happens after login (e.g., session persistence, return values, error handling), leaving gaps in understanding the tool's behavior and outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 1 parameter with 100% coverage, describing it as a 'Dummy parameter for no-parameter tools.' The description doesn't add any parameter-specific information, which is appropriate since the tool likely doesn't require user-provided inputs. With high schema coverage and no meaningful parameters, a baseline of 4 is justified as the description doesn't need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Log in to eClass using username/password from your .env file through UoA's SSO.' It specifies the action (log in), target system (eClass), and authentication method (SSO with .env credentials). However, it doesn't explicitly differentiate from sibling tools like 'authstatus' or 'logout' beyond the obvious login/logout distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it should be used to authenticate with eClass via SSO when credentials are stored in .env. However, it doesn't provide explicit guidance on when to use this vs. alternatives like 'authstatus' (which might check login state) or prerequisites beyond .env configuration. The guidance is somewhat implied but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logoutB
Log out from eClass
| Name | Required | Description | Default |
|---|---|---|---|
| random_string | Yes | Dummy parameter for no-parameter tools |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Log out' implies session termination, it doesn't specify what gets invalidated, whether this affects other tools, if re-authentication is required afterward, or what happens on failure. The description lacks important behavioral context for a security-sensitive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is maximally concise with just three words that directly convey the tool's purpose. There's zero waste or unnecessary elaboration, and it's perfectly front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a security operation like logout with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after logout, whether the operation can fail, what state changes occur, or how this affects subsequent tool calls. The minimal description leaves critical behavioral questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the single parameter clearly documented as a 'Dummy parameter for no-parameter tools.' The description doesn't need to add parameter semantics since the tool conceptually requires no real parameters, and the schema adequately explains the dummy parameter requirement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Log out') and target system ('from eClass'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'login' or 'authstatus' beyond the obvious action difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'authstatus' to check login state, or whether logout should follow certain workflows. It simply states what the tool does without context about appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
- First observed
authstatus - First observed
get_courses - First observed
login - First observed
logout
TDQS
Scored across 4 tools
Each tool has a distinct purpose with no overlap: authstatus checks authentication state, get_courses retrieves course data, login handles authentication, and logout terminates sessions. The descriptions clearly differentiate these functions, making tool selection straightforward for an agent.
Three tools follow a consistent verb_noun pattern (get_courses, login, logout), while authstatus uses a compound noun. This minor deviation slightly reduces consistency, but the naming remains readable and intuitive overall.
Four tools are reasonable for an eClass server focused on authentication and basic course access. It covers core authentication workflows and data retrieval, though it could be slightly expanded for a more comprehensive eClass integration.
The tools cover authentication and course listing well, but there are notable gaps for typical eClass functionality such as accessing course content, assignments, grades, or announcements. This limits the server's ability to support full eClass workflows.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
MCP Server for an Agent Task Marketplace
MCP server enabling AI agents to manage Bitrix24 features via standardized protocol
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that enables LLMs to interact with the Moodle platform to manage courses, students, assignments, and quizzes.78 npmMIT
- AlicenseNot gradedqualityDmaintenanceMCP server that turns UPB Virtual (Moodle) into a structured knowledge source, enabling AI assistants to query courses, assignments, deadlines, announcements, and sync materials via REST API.MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that connects AI assistants to university D2L Brightspace and Piazza, enabling query of courses, grades, assignments, deadlines, files, and Piazza posts.7MIT
- AlicenseAqualityBmaintenanceMCP server for Moodle that lets AI agents publish and manage pedagogical content — courses, lessons, quizzes, forums — via Moodle Web Services with idempotency.45MIT