Name | mcp-server-sis JSON |
Version |
0.1.4
JSON |
| download |
home_page | None |
Summary | MCP server for CUHKSZ SIS system |
upload_time | 2025-07-18 11:54:13 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | MIT |
keywords |
cuhksz
sis
mcp
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# CUHKSZ SIS MCP 服务器
一个基于模型上下文协议 (MCP) 的香港中文大学(深圳)学生信息系统 (SIS) 接口服务。
## 📋 目录
- [项目描述](#项目描述)
- [可用工具](#可用工具)
- [安装与部署](#安装与部署)
- [测试说明](#测试说明)
- [项目架构](#项目架构)
- [实现方式与核心逻辑](#实现方式与核心逻辑)
- [故障排除](#故障排除)
- [许可证](#许可证)
## ✨ 项目描述
一个基于模型上下文协议 (MCP) 的香港中文大学(深圳)学生信息系统 (SIS) 接口服务,该服务使语言模型能够查询课程表、成绩、课程信息等。
## 🛠️ 可用工具
- `sis_get_schedule` - 获取个人课程表。
- 无需参数。
- `sis_get_course` - 查询指定课程在特定学期的详细信息。
- **必要参数**:
- `course_code` (string): 课程代码,例如 "CSC3002"。
- `term` (string): 学期代码,例如 "2410" 代表 2024-25 Term1,"2450" 代表 2024-25 Summer Session。
- **可选参数**:
- `open_only` (bool): 是否只显示有名额的课程,默认为 `False`。
- `sis_get_grades` - 查询指定学期的成绩。
- **必要参数**:
- `term` (string): 学期名称,例如 "2024-25 Term 1"。
- `sis_get_course_outline` - 查询课程大纲。
- **必要参数**:
- `course_code` (string): 课程代码,例如 "CSC3002"。
- `sis_get_academic_record` - 查询学术记录,包括所有修读过的课程。
- 无需参数。
## 🚀 安装与部署
本服务支持 Docker 部署和本地运行两种方式。
### 1. 使用 Docker (推荐)
此方法最简单,推荐用于生产和日常使用。
**a. 环境准备**
- 安装 [Docker](https://www.docker.com/get-started/) 和 [Docker Compose](https://docs.docker.com/compose/install/)。
- 克隆项目:
```bash
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. 构建和启动服务**
```bash
# 构建并以守护进程模式启动容器(首次运行或代码更新后)
docker-compose up --build -d
# 查看实时日志
docker-compose logs -f sis-mcp
# 停止服务
docker-compose down
```
服务启动后,将在 `http://localhost:3000` 上提供 MCP 接口。
### 2. 本地运行 (用于开发)
如果您希望在本地直接运行服务进行开发或测试:
**a. 环境准备**
克隆项目并进入目录:
```bash
git clone https://github.com/BetterAndBetterII/awesome-cuhksz-mcp.git
cd SIS-MCP
```
创建并激活 Python 虚拟环境:
```bash
python3 -m venv .venv
source .venv/bin/activate
```
安装项目依赖。使用 `-e` 标志以可编辑模式安装,这样您的代码更改会立刻生效:
```bash
pip install -e .
```
**b. 配置凭证**
您可以通过以下两种方式提供您的 SIS 凭证(命令行参数优先):
1. **(推荐)创建 `.env` 文件**:
在项目根目录 (`SIS-MCP/`) 下创建一个 `.env` 文件,并填入您的凭证。
```
# .env 文件内容
SIS_USERNAME=你的学号
SIS_PASSWORD=你的密码
```
2. **命令行参数**:
在启动命令中直接提供凭证。
**c. 启动服务**
- 如果您配置了 `.env` 文件:
```bash
# 使用模块名启动 (默认使用 stdio 传输)
python -m mcp_server_sis
# 或者,使用安装后生成的可执行脚本 (默认使用 stdio 传输)
mcp-server-sis
```
- 如果您希望使用命令行参数提供凭证 (默认使用 stdio 传输):
```bash
python -m mcp_server_sis --username 你的学号 --password 你的密码
```
> **注意**: `stdio` 模式用于直接的进程间通信,不会监听网络端口。如果需要通过网络(如 `http://localhost:3000`)访问服务,或运行 `test/test.py` 脚本,必须在启动时指定 `sse` 传输模式:
> ```bash
> python -m mcp_server_sis --transport sse
> ```
- 如果您希望使用命令行参数提供凭证并使用 SSE 传输:
```bash
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 工具的功能。
### 运行测试
```bash
# 确保服务已启动 (无论是通过 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` 参数提供了凭证。
## 📄 许可证
本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。
---
**⚠️ 免责声明**: 本项目仅供学习和研究使用。请遵守学校的相关政策和服务条款。
Raw data
{
"_id": null,
"home_page": null,
"name": "mcp-server-sis",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "CUHKSZ, SIS, MCP",
"author": null,
"author_email": "LKCY23 <lkcydream@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/c5/0d/b32a65c150e6110c17dd6421652cd06c0a066603531b482910de433a1898/mcp_server_sis-0.1.4.tar.gz",
"platform": null,
"description": "# CUHKSZ SIS MCP \u670d\u52a1\u5668\n\n\u4e00\u4e2a\u57fa\u4e8e\u6a21\u578b\u4e0a\u4e0b\u6587\u534f\u8bae (MCP) \u7684\u9999\u6e2f\u4e2d\u6587\u5927\u5b66\uff08\u6df1\u5733\uff09\u5b66\u751f\u4fe1\u606f\u7cfb\u7edf (SIS) \u63a5\u53e3\u670d\u52a1\u3002\n\n## \ud83d\udccb \u76ee\u5f55\n\n- [\u9879\u76ee\u63cf\u8ff0](#\u9879\u76ee\u63cf\u8ff0)\n- [\u53ef\u7528\u5de5\u5177](#\u53ef\u7528\u5de5\u5177)\n- [\u5b89\u88c5\u4e0e\u90e8\u7f72](#\u5b89\u88c5\u4e0e\u90e8\u7f72)\n- [\u6d4b\u8bd5\u8bf4\u660e](#\u6d4b\u8bd5\u8bf4\u660e)\n- [\u9879\u76ee\u67b6\u6784](#\u9879\u76ee\u67b6\u6784)\n- [\u5b9e\u73b0\u65b9\u5f0f\u4e0e\u6838\u5fc3\u903b\u8f91](#\u5b9e\u73b0\u65b9\u5f0f\u4e0e\u6838\u5fc3\u903b\u8f91)\n- [\u6545\u969c\u6392\u9664](#\u6545\u969c\u6392\u9664)\n- [\u8bb8\u53ef\u8bc1](#\u8bb8\u53ef\u8bc1)\n\n## \u2728 \u9879\u76ee\u63cf\u8ff0\n\n\u4e00\u4e2a\u57fa\u4e8e\u6a21\u578b\u4e0a\u4e0b\u6587\u534f\u8bae (MCP) \u7684\u9999\u6e2f\u4e2d\u6587\u5927\u5b66\uff08\u6df1\u5733\uff09\u5b66\u751f\u4fe1\u606f\u7cfb\u7edf (SIS) \u63a5\u53e3\u670d\u52a1\uff0c\u8be5\u670d\u52a1\u4f7f\u8bed\u8a00\u6a21\u578b\u80fd\u591f\u67e5\u8be2\u8bfe\u7a0b\u8868\u3001\u6210\u7ee9\u3001\u8bfe\u7a0b\u4fe1\u606f\u7b49\u3002\n\n## \ud83d\udee0\ufe0f \u53ef\u7528\u5de5\u5177\n\n- `sis_get_schedule` - \u83b7\u53d6\u4e2a\u4eba\u8bfe\u7a0b\u8868\u3002\n - \u65e0\u9700\u53c2\u6570\u3002\n\n- `sis_get_course` - \u67e5\u8be2\u6307\u5b9a\u8bfe\u7a0b\u5728\u7279\u5b9a\u5b66\u671f\u7684\u8be6\u7ec6\u4fe1\u606f\u3002\n - **\u5fc5\u8981\u53c2\u6570**:\n - `course_code` (string): \u8bfe\u7a0b\u4ee3\u7801\uff0c\u4f8b\u5982 \"CSC3002\"\u3002\n - `term` (string): \u5b66\u671f\u4ee3\u7801\uff0c\u4f8b\u5982 \"2410\" \u4ee3\u8868 2024-25 Term1\uff0c\"2450\" \u4ee3\u8868 2024-25 Summer Session\u3002\n - **\u53ef\u9009\u53c2\u6570**:\n - `open_only` (bool): \u662f\u5426\u53ea\u663e\u793a\u6709\u540d\u989d\u7684\u8bfe\u7a0b\uff0c\u9ed8\u8ba4\u4e3a `False`\u3002\n\n- `sis_get_grades` - \u67e5\u8be2\u6307\u5b9a\u5b66\u671f\u7684\u6210\u7ee9\u3002\n - **\u5fc5\u8981\u53c2\u6570**:\n - `term` (string): \u5b66\u671f\u540d\u79f0\uff0c\u4f8b\u5982 \"2024-25 Term 1\"\u3002\n\n- `sis_get_course_outline` - \u67e5\u8be2\u8bfe\u7a0b\u5927\u7eb2\u3002\n - **\u5fc5\u8981\u53c2\u6570**:\n - `course_code` (string): \u8bfe\u7a0b\u4ee3\u7801\uff0c\u4f8b\u5982 \"CSC3002\"\u3002\n\n- `sis_get_academic_record` - \u67e5\u8be2\u5b66\u672f\u8bb0\u5f55\uff0c\u5305\u62ec\u6240\u6709\u4fee\u8bfb\u8fc7\u7684\u8bfe\u7a0b\u3002\n - \u65e0\u9700\u53c2\u6570\u3002\n\n## \ud83d\ude80 \u5b89\u88c5\u4e0e\u90e8\u7f72\n\n\u672c\u670d\u52a1\u652f\u6301 Docker \u90e8\u7f72\u548c\u672c\u5730\u8fd0\u884c\u4e24\u79cd\u65b9\u5f0f\u3002\n\n### 1. \u4f7f\u7528 Docker (\u63a8\u8350)\n\n\u6b64\u65b9\u6cd5\u6700\u7b80\u5355\uff0c\u63a8\u8350\u7528\u4e8e\u751f\u4ea7\u548c\u65e5\u5e38\u4f7f\u7528\u3002\n\n**a. \u73af\u5883\u51c6\u5907**\n\n- \u5b89\u88c5 [Docker](https://www.docker.com/get-started/) \u548c [Docker Compose](https://docs.docker.com/compose/install/)\u3002\n- \u514b\u9686\u9879\u76ee:\n ```bash\n git clone https://github.com/BetterAndBetterII/awesome-cuhksz-mcp.git\n cd SIS-MCP\n ```\n\n**b. \u914d\u7f6e\u51ed\u8bc1**\n\n\u5728\u9879\u76ee\u6839\u76ee\u5f55 (`SIS-MCP/`) \u521b\u5efa\u4e00\u4e2a `.env` \u6587\u4ef6\uff0c\u5e76\u586b\u5165\u60a8\u7684 SIS \u51ed\u8bc1\u3002\n\n```\n# .env \u6587\u4ef6\u5185\u5bb9\nSIS_USERNAME=\u4f60\u7684\u5b66\u53f7\nSIS_PASSWORD=\u4f60\u7684\u5bc6\u7801\n```\n**\u26a0\ufe0f \u5b89\u5168\u63d0\u9192**: \u8bf7\u52ff\u5c06 `.env` \u6587\u4ef6\u63d0\u4ea4\u5230\u7248\u672c\u63a7\u5236\u7cfb\u7edf\u3002\n\n**c. \u6784\u5efa\u548c\u542f\u52a8\u670d\u52a1**\n\n```bash\n# \u6784\u5efa\u5e76\u4ee5\u5b88\u62a4\u8fdb\u7a0b\u6a21\u5f0f\u542f\u52a8\u5bb9\u5668\uff08\u9996\u6b21\u8fd0\u884c\u6216\u4ee3\u7801\u66f4\u65b0\u540e\uff09\ndocker-compose up --build -d\n\n# \u67e5\u770b\u5b9e\u65f6\u65e5\u5fd7\ndocker-compose logs -f sis-mcp\n\n# \u505c\u6b62\u670d\u52a1\ndocker-compose down\n```\n\u670d\u52a1\u542f\u52a8\u540e\uff0c\u5c06\u5728 `http://localhost:3000` \u4e0a\u63d0\u4f9b MCP \u63a5\u53e3\u3002\n\n\n### 2. \u672c\u5730\u8fd0\u884c (\u7528\u4e8e\u5f00\u53d1)\n\n\u5982\u679c\u60a8\u5e0c\u671b\u5728\u672c\u5730\u76f4\u63a5\u8fd0\u884c\u670d\u52a1\u8fdb\u884c\u5f00\u53d1\u6216\u6d4b\u8bd5\uff1a\n\n**a. \u73af\u5883\u51c6\u5907**\n\n\u514b\u9686\u9879\u76ee\u5e76\u8fdb\u5165\u76ee\u5f55\uff1a\n```bash\ngit clone https://github.com/BetterAndBetterII/awesome-cuhksz-mcp.git\ncd SIS-MCP\n```\n\n\u521b\u5efa\u5e76\u6fc0\u6d3b Python \u865a\u62df\u73af\u5883\uff1a\n```bash\npython3 -m venv .venv\nsource .venv/bin/activate\n```\n\n\u5b89\u88c5\u9879\u76ee\u4f9d\u8d56\u3002\u4f7f\u7528 `-e` \u6807\u5fd7\u4ee5\u53ef\u7f16\u8f91\u6a21\u5f0f\u5b89\u88c5\uff0c\u8fd9\u6837\u60a8\u7684\u4ee3\u7801\u66f4\u6539\u4f1a\u7acb\u523b\u751f\u6548\uff1a\n```bash\npip install -e .\n```\n\n**b. \u914d\u7f6e\u51ed\u8bc1**\n\n\u60a8\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u4e24\u79cd\u65b9\u5f0f\u63d0\u4f9b\u60a8\u7684 SIS \u51ed\u8bc1\uff08\u547d\u4ee4\u884c\u53c2\u6570\u4f18\u5148\uff09\uff1a\n\n1. **\uff08\u63a8\u8350\uff09\u521b\u5efa `.env` \u6587\u4ef6**:\n \u5728\u9879\u76ee\u6839\u76ee\u5f55 (`SIS-MCP/`) \u4e0b\u521b\u5efa\u4e00\u4e2a `.env` \u6587\u4ef6\uff0c\u5e76\u586b\u5165\u60a8\u7684\u51ed\u8bc1\u3002\n ```\n # .env \u6587\u4ef6\u5185\u5bb9\n SIS_USERNAME=\u4f60\u7684\u5b66\u53f7\n SIS_PASSWORD=\u4f60\u7684\u5bc6\u7801\n ```\n\n2. **\u547d\u4ee4\u884c\u53c2\u6570**:\n \u5728\u542f\u52a8\u547d\u4ee4\u4e2d\u76f4\u63a5\u63d0\u4f9b\u51ed\u8bc1\u3002\n\n**c. \u542f\u52a8\u670d\u52a1**\n\n- \u5982\u679c\u60a8\u914d\u7f6e\u4e86 `.env` \u6587\u4ef6\uff1a\n ```bash\n # \u4f7f\u7528\u6a21\u5757\u540d\u542f\u52a8 (\u9ed8\u8ba4\u4f7f\u7528 stdio \u4f20\u8f93)\n python -m mcp_server_sis\n\n # \u6216\u8005\uff0c\u4f7f\u7528\u5b89\u88c5\u540e\u751f\u6210\u7684\u53ef\u6267\u884c\u811a\u672c (\u9ed8\u8ba4\u4f7f\u7528 stdio \u4f20\u8f93)\n mcp-server-sis\n ```\n\n- \u5982\u679c\u60a8\u5e0c\u671b\u4f7f\u7528\u547d\u4ee4\u884c\u53c2\u6570\u63d0\u4f9b\u51ed\u8bc1 (\u9ed8\u8ba4\u4f7f\u7528 stdio \u4f20\u8f93)\uff1a\n ```bash\n python -m mcp_server_sis --username \u4f60\u7684\u5b66\u53f7 --password \u4f60\u7684\u5bc6\u7801\n ```\n \n> **\u6ce8\u610f**: `stdio` \u6a21\u5f0f\u7528\u4e8e\u76f4\u63a5\u7684\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff0c\u4e0d\u4f1a\u76d1\u542c\u7f51\u7edc\u7aef\u53e3\u3002\u5982\u679c\u9700\u8981\u901a\u8fc7\u7f51\u7edc\uff08\u5982 `http://localhost:3000`\uff09\u8bbf\u95ee\u670d\u52a1\uff0c\u6216\u8fd0\u884c `test/test.py` \u811a\u672c\uff0c\u5fc5\u987b\u5728\u542f\u52a8\u65f6\u6307\u5b9a `sse` \u4f20\u8f93\u6a21\u5f0f\uff1a\n> ```bash\n> python -m mcp_server_sis --transport sse\n> ```\n\n- \u5982\u679c\u60a8\u5e0c\u671b\u4f7f\u7528\u547d\u4ee4\u884c\u53c2\u6570\u63d0\u4f9b\u51ed\u8bc1\u5e76\u4f7f\u7528 SSE \u4f20\u8f93\uff1a\n ```bash\n python -m mcp_server_sis --transport sse --username \u4f60\u7684\u5b66\u53f7 --password \u4f60\u7684\u5bc6\u7801\n ```\n\n\u5f53\u4f7f\u7528 `sse` \u6a21\u5f0f\u542f\u52a8\u540e\uff0c\u670d\u52a1\u5c06\u5728 `http://localhost:3000` \u4e0a\u63d0\u4f9b MCP \u63a5\u53e3\u3002\n\n## \ud83c\udfd7\ufe0f \u9879\u76ee\u67b6\u6784\n\n### \u6838\u5fc3\u6a21\u5757\u8bf4\u660e\n\n#### 1. `sis.py` - MCP \u670d\u52a1\u5668\u5c42\n- **\u804c\u8d23**: \u5b9a\u4e49 MCP \u5de5\u5177\u63a5\u53e3\uff0c\u5904\u7406\u5f02\u6b65\u8bf7\u6c42\uff0c\u7ba1\u7406\u7f13\u5b58\u548c\u767b\u5f55\u72b6\u6001\u3002\n- **\u6838\u5fc3\u529f\u80fd**:\n - \u5168\u5c40\u767b\u5f55\u72b6\u6001\u7ba1\u7406\uff0815\u5206\u949f\u8d85\u65f6\u81ea\u52a8\u91cd\u767b\u5f55\uff09\u3002\n - \u7ed3\u679c\u7f13\u5b58\u673a\u5236\uff08TTL \u53ef\u914d\u7f6e\uff0c\u9ed8\u8ba41\u5c0f\u65f6\uff09\u3002\n - \u5f02\u6b65\u5de5\u5177\u5305\u88c5\uff08\u5c06\u540c\u6b65\u722c\u866b\u4ee3\u7801\u5728\u7ebf\u7a0b\u6c60\u4e2d\u6267\u884c\uff09\u3002\n\n#### 2. `sis_system.py` - SIS \u4ea4\u4e92\u5c42\n- **\u804c\u8d23**: \u76f4\u63a5\u4e0e CUHKSZ SIS \u7f51\u7ad9\u4ea4\u4e92\uff0c\u5904\u7406\u767b\u5f55\u8ba4\u8bc1\u548c\u6570\u636e\u6293\u53d6\u3002\n- **\u6838\u5fc3\u529f\u80fd**:\n - \u53cc\u9636\u6bb5 ADFS OAuth2 \u767b\u5f55\u6d41\u7a0b\u3002\n - HTML \u89e3\u6790\u548c\u6570\u636e\u63d0\u53d6\u3002\n - \u4f1a\u8bdd\u7ba1\u7406\u548c Cookie \u5904\u7406\u3002\n\n#### 3. `__main__.py` - \u670d\u52a1\u5165\u53e3\u4e0e\u51ed\u8bc1\u7ba1\u7406\n- **\u804c\u8d23**: \u5904\u7406\u670d\u52a1\u542f\u52a8\u3001\u53c2\u6570\u914d\u7f6e\u548c\u51ed\u8bc1\u7ba1\u7406\u3002\u5b83\u4f1a\u9a8c\u8bc1\u542f\u52a8\u65f6\u662f\u5426\u63d0\u4f9b\u4e86\u5fc5\u8981\u7684 SIS \u7528\u6237\u540d\u548c\u5bc6\u7801\uff0c\u5e76\u652f\u6301\u4ece\u547d\u4ee4\u884c\u53c2\u6570\u6216 `.env` \u6587\u4ef6\u4e2d\u8bfb\u53d6\u8fd9\u4e9b\u51ed\u8bc1\u3002\n- **\u4f20\u8f93\u534f\u8bae**: Server-Sent Events (SSE)\u3002\n- **\u9ed8\u8ba4\u7aef\u53e3**: 3000\u3002\n\n## \ud83d\udd27 \u5b9e\u73b0\u65b9\u5f0f\u4e0e\u6838\u5fc3\u903b\u8f91\n\n### 1. \u767b\u5f55\u8ba4\u8bc1\u6d41\u7a0b\n\u670d\u52a1\u91c7\u7528\u53cc\u9636\u6bb5\u8ba4\u8bc1\uff0c\u9996\u5148\u5411 ADFS \u83b7\u53d6\u6388\u6743\u7801\uff0c\u7136\u540e\u4f7f\u7528\u8be5\u7801\u5b8c\u6210 SIS \u7cfb\u7edf\u7684\u6700\u7ec8\u767b\u5f55\uff0c\u4ece\u800c\u5efa\u7acb\u4f1a\u8bdd\u3002\n\n### 2. \u7f13\u5b58\u673a\u5236\n\u4e3a\u63d0\u9ad8\u6027\u80fd\u548c\u907f\u514d\u91cd\u590d\u8bf7\u6c42\uff0c\u6240\u6709\u67e5\u8be2\u7c7b\u7684\u5de5\u5177\u90fd\u9ed8\u8ba4\u542f\u7528\u4e86\u4e00\u5c0f\u65f6\u7684\u7f13\u5b58\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7 `sis_clear_cache` \u5de5\u5177\u624b\u52a8\u6e05\u9664\u7f13\u5b58\u3002\n\n### 3. \u6570\u636e\u6293\u53d6\n\u901a\u8fc7\u6a21\u62df\u6d4f\u89c8\u5668\u884c\u4e3a\uff0c\u63d0\u4ea4\u8868\u5355\u5e76\u89e3\u6790\u8fd4\u56de\u7684 HTML \u9875\u9762\u6765\u63d0\u53d6\u6240\u9700\u7684\u6570\u636e\u3002\u6838\u5fc3\u89e3\u6790\u5e93\u4e3a `lxml`\u3002\n\n## \ud83e\uddea \u6d4b\u8bd5\u8bf4\u660e\n\n\u9879\u76ee\u63d0\u4f9b\u4e86\u5b8c\u6574\u7684\u81ea\u52a8\u5316\u6d4b\u8bd5\u811a\u672c `test/test.py`\uff0c\u7528\u4e8e\u9a8c\u8bc1\u6240\u6709 MCP \u5de5\u5177\u7684\u529f\u80fd\u3002\n\n### \u8fd0\u884c\u6d4b\u8bd5\n\n```bash\n# \u786e\u4fdd\u670d\u52a1\u5df2\u542f\u52a8 (\u65e0\u8bba\u662f\u901a\u8fc7 Docker \u8fd8\u662f\u672c\u5730\u8fd0\u884c)\n# \u8fdb\u5165\u6d4b\u8bd5\u76ee\u5f55\u5e76\u8fd0\u884c\u6d4b\u8bd5\ncd test\npython test.py\n```\n\u811a\u672c\u4f1a\u81ea\u52a8\u8fde\u63a5\u670d\u52a1\u3001\u53d1\u73b0\u5de5\u5177\u3001\u4f7f\u7528\u9884\u8bbe\u53c2\u6570\u8c03\u7528\u5e76\u663e\u793a\u7ed3\u679c\u3002\n\n## \ud83d\udd27 \u6545\u969c\u6392\u9664\n\n### \u5e38\u89c1\u95ee\u9898\n\n#### 1. \u5bb9\u5668\u542f\u52a8\u5931\u8d25\n- **\u75c7\u72b6**: `docker-compose up` \u547d\u4ee4\u5931\u8d25\u3002\n- **\u89e3\u51b3\u65b9\u6848**: \u68c0\u67e5 `.env` \u6587\u4ef6\u662f\u5426\u5b58\u5728\uff0c\u5e76\u91cd\u65b0\u6784\u5efa\u5bb9\u5668 `docker-compose up --build`\u3002\n\n#### 2. \u767b\u5f55\u5931\u8d25\n- **\u75c7\u72b6**: \u65e5\u5fd7\u663e\u793a \"Failed to login to SIS system\" \u6216 \"Username or password incorrect!\"\u3002\n- **\u89e3\u51b3\u65b9\u6848**: \u9a8c\u8bc1 `.env` \u6587\u4ef6\u4e2d\u7684 `SIS_USERNAME` \u548c `SIS_PASSWORD` \u662f\u5426\u6b63\u786e\u3002\n\n#### 3. \u542f\u52a8\u65f6\u62a5\u9519 \"Error: SIS_USERNAME and SIS_PASSWORD must be provided\"\n- **\u75c7\u72b6**: \u670d\u52a1\u65e0\u6cd5\u542f\u52a8\uff0c\u5e76\u663e\u793a\u51ed\u8bc1\u7f3a\u5931\u7684\u9519\u8bef\u3002\n- **\u89e3\u51b3\u65b9\u6848**:\n - **Docker**: \u786e\u4fdd\u9879\u76ee\u6839\u76ee\u5f55\u4e2d\u5b58\u5728 `.env` \u6587\u4ef6\u4e14\u5185\u5bb9\u6b63\u786e\u3002\n - **\u672c\u5730\u8fd0\u884c**: \u786e\u4fdd\u5df2\u521b\u5efa `.env` \u6587\u4ef6\uff0c\u6216\u5728\u542f\u52a8\u65f6\u901a\u8fc7 `--username` \u548c `--password` \u53c2\u6570\u63d0\u4f9b\u4e86\u51ed\u8bc1\u3002\n\n## \ud83d\udcc4 \u8bb8\u53ef\u8bc1\n\n\u672c\u9879\u76ee\u91c7\u7528 MIT \u8bb8\u53ef\u8bc1\u3002\u8be6\u89c1 [LICENSE](LICENSE) \u6587\u4ef6\u3002\n\n---\n**\u26a0\ufe0f \u514d\u8d23\u58f0\u660e**: \u672c\u9879\u76ee\u4ec5\u4f9b\u5b66\u4e60\u548c\u7814\u7a76\u4f7f\u7528\u3002\u8bf7\u9075\u5b88\u5b66\u6821\u7684\u76f8\u5173\u653f\u7b56\u548c\u670d\u52a1\u6761\u6b3e\u3002 \n",
"bugtrack_url": null,
"license": "MIT",
"summary": "MCP server for CUHKSZ SIS system",
"version": "0.1.4",
"project_urls": null,
"split_keywords": [
"cuhksz",
" sis",
" mcp"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "ac87a85e10faf1d6df2bfb2b7de297705b4b8107ecd4d0162b0c6739df274723",
"md5": "c39e1c904f11c0289a3c7c4f7cf4e321",
"sha256": "fc85f4f792be9573d0baf57bbe41d91180c2b4a18823182c6dfe1de430f13cb3"
},
"downloads": -1,
"filename": "mcp_server_sis-0.1.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c39e1c904f11c0289a3c7c4f7cf4e321",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 16612,
"upload_time": "2025-07-18T11:54:11",
"upload_time_iso_8601": "2025-07-18T11:54:11.842776Z",
"url": "https://files.pythonhosted.org/packages/ac/87/a85e10faf1d6df2bfb2b7de297705b4b8107ecd4d0162b0c6739df274723/mcp_server_sis-0.1.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c50db32a65c150e6110c17dd6421652cd06c0a066603531b482910de433a1898",
"md5": "876ee97145cbcb4caaa8a7929f532453",
"sha256": "8ca9533b51690dff6a200727fc6d452249b23fef693c479012d8fd43822e376c"
},
"downloads": -1,
"filename": "mcp_server_sis-0.1.4.tar.gz",
"has_sig": false,
"md5_digest": "876ee97145cbcb4caaa8a7929f532453",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 19974,
"upload_time": "2025-07-18T11:54:13",
"upload_time_iso_8601": "2025-07-18T11:54:13.222959Z",
"url": "https://files.pythonhosted.org/packages/c5/0d/b32a65c150e6110c17dd6421652cd06c0a066603531b482910de433a1898/mcp_server_sis-0.1.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-18 11:54:13",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "mcp-server-sis"
}