MCP server for CUHKSZ SIS system
Project description
CUHKSZ SIS MCP 服务器
一个基于模型上下文协议 (MCP) 的香港中文大学(深圳)学生信息系统 (SIS) 接口服务。
📋 目录
✨ 项目描述
一个基于模型上下文协议 (MCP) 的香港中文大学(深圳)学生信息系统 (SIS) 接口服务,该服务使语言模型能够查询课程表、成绩、课程信息等。
🛠️ 可用工具
1. sis_get_schedule
获取您在 SIS 系统中当前学期的个人课程表。
- 参数说明: 无需参数。
2. sis_get_course
查询指定课程在特定学期的详细开课信息,包括时间、地点、教师和名额。
- 参数说明:
course_code(string): 必须。完整的课程代码。- 格式: 由学科前缀和课程编号组成,例如
"CSC3002"。
- 格式: 由学科前缀和课程编号组成,例如
term(string): 必须。要查询的学期代码。- 格式: 四位数字,前两位代表学年,后两位代表学期。例如:
"2410": 2024-25学年的第一学期 (秋季)。"2420": 2024-25学年的第二学期 (春夏)。"2450": 2024-25学年的夏季学期。
- 格式: 四位数字,前两位代表学年,后两位代表学期。例如:
open_only(bool): 可选。是否只显示仍有名额的课程。默认为False。
3. sis_get_grades
查询您在指定学期的所有课程成绩。
- 参数说明:
term(string): 必须。要查询的学期名称。- 格式: SIS 系统中的标准学期名称,例如
"2024-25 Term 1"。
- 格式: SIS 系统中的标准学期名称,例如
4. sis_get_course_outline
查询指定课程的官方大纲信息,包括课程描述和先修课程要求。
- 参数说明:
course_code(string): 必须。完整的课程代码,例如"CSC3002"。
5. sis_get_academic_record
查询您的完整学术记录,包括所有学期修读过的课程、成绩和学分。
- 参数说明: 无需参数。
🚀 安装与部署
本服务支持 Docker 部署和本地运行两种方式。
1. 使用 Docker (推荐)
此方法最简单,推荐用于生产和日常使用。
a. 环境准备
- 安装 Docker 和 Docker Compose。
- 克隆项目:
git clone https://github.com/BetterAndBetterII/awesome-cuhksz-mcp.git cd SIS-MCP
b. 配置凭证
在项目根目录 (SIS-MCP/) 创建一个 .env 文件,并填入您的 SIS 凭证。
# .env 文件内容
SIS_USERNAME=你的学号
SIS_PASSWORD=你的密码
⚠️ 安全提醒: 请勿将 .env 文件提交到版本控制系统。
c. 构建和启动服务
# 构建并以守护进程模式启动容器(首次运行或代码更新后)
docker-compose up --build -d
# 查看实时日志
docker-compose logs -f sis-mcp
# 停止服务
docker-compose down
服务启动后,将在 http://localhost:3000 上提供 MCP 接口。
2. 本地运行 (用于开发)
如果您希望在本地直接运行服务进行开发或测试:
a. 环境准备
克隆项目并进入目录:
git clone https://github.com/BetterAndBetterII/awesome-cuhksz-mcp.git
cd SIS-MCP
创建并激活 Python 虚拟环境:
python3 -m venv .venv
source .venv/bin/activate
安装项目依赖。使用 -e 标志以可编辑模式安装,这样您的代码更改会立刻生效:
pip install -e .
b. 配置凭证
您可以通过以下两种方式提供您的 SIS 凭证(命令行参数优先):
-
(推荐)创建
.env文件: 在项目根目录 (SIS-MCP/) 下创建一个.env文件,并填入您的凭证。# .env 文件内容 SIS_USERNAME=你的学号 SIS_PASSWORD=你的密码 -
命令行参数: 在启动命令中直接提供凭证。
c. 启动服务
-
如果您配置了
.env文件:# 使用模块名启动 (默认使用 stdio 传输) python -m mcp_server_sis # 或者,使用安装后生成的可执行脚本 (默认使用 stdio 传输) mcp-server-sis
-
如果您希望使用命令行参数提供凭证 (默认使用 stdio 传输):
python -m mcp_server_sis --username 你的学号 --password 你的密码
注意:
stdio模式用于直接的进程间通信,不会监听网络端口。如果需要通过网络(如http://localhost:3000)访问服务,或运行test/test.py脚本,必须在启动时指定sse传输模式:python -m mcp_server_sis --transport sse
- 如果您希望使用命令行参数提供凭证并使用 SSE 传输:
python -m mcp_server_sis --transport sse --username 你的学号 --password 你的密码
当使用 sse 模式启动后,服务将在 http://localhost:3000 上提供 MCP 接口。
🏗️ 项目架构
核心模块说明
1. sis.py - MCP 服务器层
- 职责: 定义 MCP 工具接口,处理异步请求,管理缓存和登录状态。
- 核心功能:
- 全局登录状态管理(15分钟超时自动重登录)。
- 结果缓存机制(TTL 可配置,默认1小时)。
- 异步工具包装(将同步爬虫代码在线程池中执行)。
2. sis_system.py - SIS 交互层
- 职责: 直接与 CUHKSZ SIS 网站交互,处理登录认证和数据抓取。
- 核心功能:
- 双阶段 ADFS OAuth2 登录流程。
- HTML 解析和数据提取。
- 会话管理和 Cookie 处理。
3. __main__.py - 服务入口与凭证管理
- 职责: 处理服务启动、参数配置和凭证管理。它会验证启动时是否提供了必要的 SIS 用户名和密码,并支持从命令行参数或
.env文件中读取这些凭证。 - 传输协议: Server-Sent Events (SSE)。
- 默认端口: 3000。
🔧 实现方式与核心逻辑
1. 登录认证流程
服务采用双阶段认证,首先向 ADFS 获取授权码,然后使用该码完成 SIS 系统的最终登录,从而建立会话。
2. 缓存机制
为提高性能和避免重复请求,所有查询类的工具都默认启用了一小时的缓存。您可以通过 sis_clear_cache 工具手动清除缓存。
3. 数据抓取
通过模拟浏览器行为,提交表单并解析返回的 HTML 页面来提取所需的数据。核心解析库为 lxml。
🧪 测试说明
项目提供了完整的自动化测试脚本 test/test.py,用于验证所有 MCP 工具的功能。
运行测试
# 确保服务已启动 (无论是通过 Docker 还是本地运行)
# 进入测试目录并运行测试
cd test
python test.py
脚本会自动连接服务、发现工具、使用预设参数调用并显示结果。
🔧 故障排除
常见问题
1. 容器启动失败
- 症状:
docker-compose up命令失败。 - 解决方案: 检查
.env文件是否存在,并重新构建容器docker-compose up --build。
2. 登录失败
- 症状: 日志显示 "Failed to login to SIS system" 或 "Username or password incorrect!"。
- 解决方案: 验证
.env文件中的SIS_USERNAME和SIS_PASSWORD是否正确。
3. 启动时报错 "Error: SIS_USERNAME and SIS_PASSWORD must be provided"
- 症状: 服务无法启动,并显示凭证缺失的错误。
- 解决方案:
- Docker: 确保项目根目录中存在
.env文件且内容正确。 - 本地运行: 确保已创建
.env文件,或在启动时通过--username和--password参数提供了凭证。
- Docker: 确保项目根目录中存在
📄 许可证
本项目采用 MIT 许可证。详见 LICENSE 文件。
⚠️ 免责声明: 本项目仅供学习和研究使用。请遵守学校的相关政策和服务条款。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_server_sis-0.1.7.tar.gz.
File metadata
- Download URL: mcp_server_sis-0.1.7.tar.gz
- Upload date:
- Size: 21.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78f4b86a829113a5c84d5b4e2cb7ad8c72430ac601acbf117da7f95cf2e6e9d9
|
|
| MD5 |
d9002b73b96c4c69e348ef6bf7c03f26
|
|
| BLAKE2b-256 |
e51156c4abb08d452798e76cdbeb3d7f569d0b6b4519b30f68ee30123ab33113
|
File details
Details for the file mcp_server_sis-0.1.7-py3-none-any.whl.
File metadata
- Download URL: mcp_server_sis-0.1.7-py3-none-any.whl
- Upload date:
- Size: 17.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40e51fd67a9eb9ccff4c1e6440a32610e42c90b372d220b99224c48d5c12815d
|
|
| MD5 |
94ebc7d58d02065542bddc8ef6e6c844
|
|
| BLAKE2b-256 |
f12031a40af6e9a746c346727b9d5a4384f85b25a4b6081b750062c5f7aeb303
|