Skip to main content

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"

4. sis_get_course_outline

查询指定课程的官方大纲信息,包括课程描述和先修课程要求。

  • 参数说明:
    • course_code (string): 必须。完整的课程代码,例如 "CSC3002"

5. sis_get_academic_record

查询您的完整学术记录,包括所有学期修读过的课程、成绩和学分。

  • 参数说明: 无需参数。

🚀 安装与部署

本服务支持 Docker 部署和本地运行两种方式。

1. 使用 Docker (推荐)

此方法最简单,推荐用于生产和日常使用。

a. 环境准备

  • 安装 DockerDocker 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 凭证(命令行参数优先):

  1. (推荐)创建 .env 文件: 在项目根目录 (SIS-MCP/) 下创建一个 .env 文件,并填入您的凭证。

    # .env 文件内容
    SIS_USERNAME=你的学号
    SIS_PASSWORD=你的密码
    
  2. 命令行参数: 在启动命令中直接提供凭证。

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_USERNAMESIS_PASSWORD 是否正确。

3. 启动时报错 "Error: SIS_USERNAME and SIS_PASSWORD must be provided"

  • 症状: 服务无法启动,并显示凭证缺失的错误。
  • 解决方案:
    • Docker: 确保项目根目录中存在 .env 文件且内容正确。
    • 本地运行: 确保已创建 .env 文件,或在启动时通过 --username--password 参数提供了凭证。

📄 许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。


⚠️ 免责声明: 本项目仅供学习和研究使用。请遵守学校的相关政策和服务条款。

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_server_sis-0.1.9.tar.gz (21.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_server_sis-0.1.9-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file mcp_server_sis-0.1.9.tar.gz.

File metadata

  • Download URL: mcp_server_sis-0.1.9.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

Hashes for mcp_server_sis-0.1.9.tar.gz
Algorithm Hash digest
SHA256 ce86947b788f99ba5fcb6780b0a31795b67ca9bde9644b0009c880effe7ce93d
MD5 83d7d91b8e73ccf845e01e96620daaff
BLAKE2b-256 0a370700d0101ab23737f2d5a2a3015606e1b8161ecb5174dd6e2782ce2dfb6c

See more details on using hashes here.

File details

Details for the file mcp_server_sis-0.1.9-py3-none-any.whl.

File metadata

  • Download URL: mcp_server_sis-0.1.9-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

Hashes for mcp_server_sis-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 85fb54e23163d6f04487ddfc07356722f25c0eecce1868be104fc3419fc14b2d
MD5 cefccf841f227058ebe5c475ef0096eb
BLAKE2b-256 13f6383ef8335b76ea7c0658701a47e9531e27dbf21f44a53bb9c8271827e4e9

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.9 This release

2 files

0.1.8

2 files

0.1.7

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page