WHU MCP Server

WHU MCP Server

武汉大学校园服务 MCP 服务器,提供图书馆座位、课表、成绩、考试、天气等工具,通过 SSE 协议供 Claude Code 远程调用。

Category
访问服务器

README

WHU MCP Server

武汉大学校园服务 MCP 服务器 + Claude Code Skill,覆盖图书馆座位、课表、成绩、考试、天气五大场景。

两种使用方式

远程 SSE(推荐) 本地 stdio
需要什么 我们维护的服务器 自己电脑跑
配置 三行 JSON 三行 JSON
安装 零安装 pip install
多人共享 ✅ 同一服务器 ❌ 各自独立
依赖 Redis ✅ 凭证中心存储 ❌ 本地文件

用户指南

方式一:远程 SSE

1. 在 ~/.mcp.json 中加入:

{
  "mcpServers": {
    "whu-lib": {
      "type": "sse",
      "url": "https://whu-mcp.daoxiang.xyz/sse"
    }
  }
}

2. 安装 Skill(可选但推荐):

mkdir -p ~/.claude/skills/whu-lib
cp skill/SKILL.md ~/.claude/skills/whu-lib/SKILL.md

3. 重启 Claude Code。

方式二:本地 stdio

1. 安装:

git clone https://github.com/daoxiang0520/LuojiaAgent.git
cd LuojiaAgent/mcp_http
pip install -r requirements.txt
playwright install chromium

2. ~/.mcp.json:

{
  "mcpServers": {
    "whu-lib": {
      "command": "python",
      "args": ["-X", "utf8", "/绝对路径/mcp_http/server.py", "--transport", "stdio"]
    }
  }
}

3. 重启 Claude Code。

三种登录方式

方式 工具 说明
密码登录 login_password 在对话中直接输入学号密码
扫码登录 login_qr → login_qr_poll QR 码在对话中显示,APP 扫码
Streamlit 浏览器 扫码后侧边栏获取 session_id

日常使用

第一次:

  你: "帮我登录武大"
  Claude: [显示 QR 码]
  [你用 APP 扫码]
  Claude: "✅ session_id: abc123"

之后(4 小时内无需重新登录):

  你: "工学分馆明天下午有座位吗"
  你: "我这学期 GPA 多少"
  你: "明天什么课"
  你: "帮我预约 305 区 120 号"
  你: "我要走了,签退"
  你: "明天要带伞吗"

工具列表(14 个)

工具 需要登录 说明
login_password — 学号+密码登录
login_qr — 生成 CAS 扫码二维码
login_qr_poll — 轮询扫码结果,完成登录
get_seats ✅ 查询分馆座位大盘
get_seat_map ✅ 查询区域内座位排布
reserve_seat ✅ 预约座位(自动破解验证码)
get_current_usage ✅ 当前在坐座位
get_reservations ✅ 预约记录(含历史)
cancel_reservation ✅ 取消预约
stop_usage ✅ 签退释放座位
query_schedule ✅ 课表查询
query_exam_schedule ✅ 考试安排
query_grades ✅ 成绩查询(含 GPA)
get_weather ❌ 珞珈山天气(免登)

架构

┌──────────────────────────────────────────────────────────┐
│                      你的电脑                             │
│  Claude Code                                             │
│   ├── Skill (whu-lib)  ← 武大领域知识                    │
│   └── MCP Client       ← SSE/stdio 协议                  │
└──────────┬───────────────────────────────────────────────┘
           │
    ┌──────▼──────┐
    │  MCP Server  │  也可远程部署 (whu-mcp.daoxiang.xyz)
    │  :8000       │
    └──────┬──────┘
           │
    ┌──────▼──────┐     ┌─────────────┐
    │    Redis    │     │  lib/ 模块   │
    │  session    │     │ library_api  │──▶ 图书馆 API
    │  凭证 4h TTL │     │ courses_tool │──▶ 教务 API
    └─────────────┘     │ weather_tool │──▶ 天气 API
                        │ captcha      │──▶ 验证码破解
                        └─────────────┘

部署(维护者)

服务器

cd /www/wwwroot/luojiaagent/mcp_http
pip install -r requirements.txt
playwright install chromium && playwright install-deps chromium
python server.py --transport sse --host 127.0.0.1 --port 8000

宝塔保活

Supervisor → 添加守护进程:

字段 值
名称 whu-mcp
目录 /www/wwwroot/luojiaagent/mcp_http
命令 python server.py --transport sse --host 127.0.0.1 --port 8000

Nginx 反代

location /sse {
    proxy_pass http://127.0.0.1:8000/sse;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_read_timeout 3600s;
}
location /messages { proxy_pass http://127.0.0.1:8000/messages; }
location /health   { proxy_pass http://127.0.0.1:8000/health; }

Streamlit 集成

在 app.py 登录成功后:

from streamlit_redis import save_to_redis
sid = save_to_redis(
    castgc=st.session_state.cookies["castgc"],
    token=st.session_state.cookies["library_token"],
    hmac_key=st.session_state.cookies["library_hmac_key"],
    educational=st.session_state.cookies.get("educational", ""),
    student_id=st.session_state.cookies.get("student_id", ""),
)
st.sidebar.success(f"MCP session_id: `{sid}`")

项目结构

mcp_http/
├── server.py              # MCP Server (--transport stdio|sse)
├── redis_store.py         # Redis 凭证存取
├── streamlit_redis.py     # Streamlit ↔ Redis 集成
├── requirements.txt
├── start.bat              # Windows 一键启动
├── README.md
├── skill/
│   └── SKILL.md           # Claude Code Skill
└── lib/                   # 自包含依赖
    ├── library_api.py     # 图书馆 HMAC 签名 + API
    ├── cas_login.py       # CAS 多方式登录
    ├── cas_encrypt.py     # 密码 AES 加密
    ├── login_helper.py    # Playwright 凭证收割
    ├── captcha_solver.py  # 验证码破解
    ├── captcha_refs.npz   # 参考库 (865KB)
    ├── courses_tool.py    # 课表
    ├── exam_tool.py       # 考试
    ├── grades_tool.py     # 成绩
    └── weather_tool.py    # 天气

FAQ

Q: 密码安全吗?
A: HTTPS 传输,不存盘、不进日志、不进 Redis。对话中短暂出现后即被后续上下文覆盖。

Q: 为什么有时 404?
A: Nginx 超时杀了 SSE 长连接。确认 proxy_read_timeout 3600s 已配置。

Q: stdio 和 SSE 怎么选?
A: 自己用 → stdio。给同学用 → SSE。

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选