学生门户数据抓取服务

一个开源的MCP服务器,为AI助手提供安全访问大学学生门户数据的能力,实现24/7智能学生支持,减轻行政负担。

  • by ChoiVadim
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 ChoiVadim/student_support_mcp_server

使用说明

KW 网页抓取工具 - 大学学生门户 MCP 服务器

革新学生支持体系一个智能的MCP(模型上下文协议)服务器,为AI助手提供安全访问大学学生门户的权限,用智能、响应迅速的聊天机器人取代传统办公人员。

🎯 愿景与使命

问题学生在访问大学办公室时常常会遇到:

  • 工作人员态度粗鲁或不提供帮助
  • 对他们的问题回答不完整
  • 长时间的等待和官僚作风导致的延误
  • 无法提供全天候服务

我们的解决方案一个开源的MCP服务器,使AI助手能够安全地访问学生门户数据,提供:

  • 全天候24/7智能学生支持
  • 全面的学术信息获取
  • 一致且有帮助的回应
  • 减轻行政负担

🚀 功能特点

核心功能

  • 📊 学术数据提取完整的成绩单解析
  • 📈 成绩点(GPA)与学分分析详细的学业进度跟踪
  • 📋 课程历史按学期划分的课程明细
  • 🎓 毕业要求自动学位进度监控

技术特点

  • 🤖 MCP(微控制器协议/多点控制单元等,具体含义根据上下文确定)集成无缝AI助手连接
  • 🐳 Docker 支持易于部署和扩展
  • 📝 结构化数据为AI消费生成的干净JSON输出

📋 先决条件

  • Python 3.12及以上版本
  • Chrome/Chromium 浏览器
  • ChromeDriver(通过Docker自动安装)
  • 大学KLAS门户网站访问凭据

🛠️ 安装

选项1:Docker(推荐)

# Clone the repository
git clone https://github.com/yourusername/kw-scraper.git
cd kw-scraper

# Build and run with Docker Compose
docker-compose up -d

# Check service status
docker-compose ps

选项2:本地安装

# Clone the repository
git clone https://github.com/yourusername/kw-scraper.git
cd kw-scraper

# Install dependencies using uv
pip install uv
uv sync

# Install ChromeDriver (macOS)
brew install chromedriver

# Install ChromeDriver (Ubuntu/Debian)
sudo apt-get install chromium-chromedriver

⚙️ 配置

环境变量

创建一个 .env 项目根目录下的文件:

STUDENT_ID=your_student_id
STUDENT_PASSWORD=your_password

服务配置

对于 systemd 服务(Linux):

# Copy service file
sudo cp kw-scraper.service /etc/systemd/system/

# Enable and start service
sudo systemctl enable kw-scraper
sudo systemctl start kw-scraper

# Check status
sudo systemctl status kw-scraper

🚀 使用方法

MCP服务器模式

1. HTTP服务器模式

python server_http.py
# Server runs on http://localhost:8000/mcp

2. 标准I/O模式(用于AI助手)

python server.py
# Communicates via stdin/stdout

API 端点

获取学生信息

POST /mcp/tools/login_and_get_student_info
Content-Type: application/json

{
  "username": "student_id",
  "password": "password"
}

响应示例:

{
  "student_info": {
    "name": "최바딤",
    "student_id": "2022203502",
    "department": "소프트웨어학부 인공지능전공",
    "academic_status": "4학년 재학",
    "advisor": "이윤구",
    "advisor_email": "yglee96@kw.ac.kr"
  },
  "academic_summary": {
    "total_semesters": 7,
    "total_courses": 45,
    "credit_summary": {
      "applied_credits": {
        "major": 54,
        "general_education": 49,
        "total": 106
      },
      "earned_credits": {
        "major": 54,
        "general_education": 49,
        "total": 106
      }
    },
    "gpa_statistics": {
      "calculated_gpa": 4.17,
      "total_graded_courses": 35
    }
  },
  "courses_by_semester": {
    "2025_fall_semester": [
      {
        "course_code": "SWE4001",
        "course_name": "소프트웨어공학",
        "course_type": "major_required",
        "credits": 3,
        "grade": "A_plus"
      }
    ]
  }
}

🏗️ 建筑学

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   AI Assistant  │◄──►│   MCP Server    │◄──►│  KLAS Portal    │
│   (Claude/GPT)  │    │  (FastMCP)      │    │  (Selenium)     │
└─────────────────┘    └─────────────────┘    └─────────────────┘
                              │
                              ▼
                       ┌─────────────────┐
                       │  Data Parser    │
                       │ (StudentInfo)   │
                       └─────────────────┘

组件

  • **KLASScraper.py**网页自动化与登录处理
  • **StudentInfoParser.py**学术数据解析与结构化
  • **server.py**用于AI集成的Stdio MCP服务器
  • **server_http.py**用于Web API的HTTP MCP服务器
  • **Dockerfile**容器化部署配置

🔧 开发

项目结构

kw-scraper/
├── src/
│   ├── KLASScraper.py      # Web scraping logic
│   ├── StudentInfoParser.py # Data parsing
│   └── __init__.py
├── data/
│   ├── student_info.json   # Sample output
│   └── sungjuk_info_2025.pdf
├── server.py               # Stdio MCP server
├── server_http.py          # HTTP MCP server
├── Dockerfile              # Container config
├── docker-compose.yml      # Orchestration
├── kw-scraper.service      # Systemd service
└── pyproject.toml          # Dependencies

运行测试

# Run the scraper locally
uv run python3 src/KLASScraper.py

# Test MCP server
uv run python3 server.py

新增大学

  1. 创建特定于大学的抓取工具:

    # src/UniversityScraper.py
    class UniversityScraper:
        def login(self, username, password):
            # University-specific login logic
            pass
    
        def get_student_data(self):
            # University-specific data extraction
            pass
    
  2. 更新MCP服务器:

    # Add new tool to server.py
    @mcp.tool(name="university_student_info")
    def get_university_student_info(university: str, username: str, password: str):
        # Route to appropriate scraper
        pass
    

🤝 贡献(或“参与贡献”)

我们欢迎投稿!以下是您可以提供帮助的方式:

对于开发者

  1. 为仓库创建分支(或:克隆仓库)
  2. 创建一个特性分支: git checkout -b feature/university-support
  3. 添加你的大学为您的机构实现数据抓取器
  4. 彻底测试确保数据准确性和错误处理
  5. 提交拉取请求包括测试和文档

对于大学

  • 联系我们 讨论整合
  • 提供测试凭据 用于发展
  • 分享反馈 关于数据准确性和特性

📊 支持的大学

大学名称 状态 门户 备注
康沃大学 ✅ 活跃 KLAS 全面支持
[你的大学] 🚧 计划中 [门户] 即将推出

🐞 故障排除

常见问题

Chrome/ChromeDriver 问题

# Update ChromeDriver
pip install --upgrade selenium
# Or use Docker for consistent environment

登录失败

  • 验证凭据是否正确
  • 检查大学门户网站是否可访问
  • 确保ChromeDriver版本与Chrome版本相匹配

MCP连接问题

# Test MCP server
curl -X POST http://localhost:8000/mcp/tools/login_and_get_student_info \
  -H "Content-Type: application/json" \
  -d '{"username":"test","password":"test"}'

📈 路线图

第一阶段:核心功能 ✅

  • [X] KLAS门户集成
  • [X] 学生数据提取
  • [X] MCP服务器实现
  • [X] Docker 部署

第二阶段:扩展🚧

  • [ ] 多校支持
  • [ ] 实时通知
  • [ ] 高级分析
  • [ ] 移动应用集成

📄 许可证

这个项目采用MIT许可证授权——详见 许可证 文件中有详细信息。


为全球学生倾心打造

通过智能自动化转变大学支持方式