AnythingBUAA
by Oblivionfun
README.md
<div align="center">
<h1>AnythingBUAA</h1>
<p><b>简体中文</b> · <a href="README.en.md">English</a></p>
<p><b>把北航的全部校园服务,变成 AI 一句话能办成的事。</b></p>
<p>一个单文件 MCP 网关,背后接了 11 个北航子系统的真实接口、674 条服务知识库,<br/>和一套从 i北航(UniWeCom)客户端里逆出来的加密与鉴权实现。</p>
<p>
<img alt="MCP" src="https://img.shields.io/badge/MCP-Model_Context_Protocol-111?style=flat-square" />
<img alt="tools" src="https://img.shields.io/badge/tools-26-6f42c1?style=flat-square" />
<img alt="subsystems" src="https://img.shields.io/badge/subsystems-11-0969da?style=flat-square" />
<img alt="services" src="https://img.shields.io/badge/service_kb-674-0969da?style=flat-square" />
<img alt="node" src="https://img.shields.io/badge/Node-%E2%89%A518-339933?style=flat-square&logo=node.js&logoColor=white" />
<img alt="deps" src="https://img.shields.io/badge/dependencies-0-2da44e?style=flat-square" />
<img alt="license" src="https://img.shields.io/badge/license-MIT-eac54f?style=flat-square" />
</p>
<p>
<a href="#一切皆-mcp">一切皆 MCP</a> ·
<a href="#能做什么">能做什么</a> ·
<a href="#快速开始">快速开始</a> ·
<a href="#架构">架构</a> ·
<a href="#技术栈深度">技术栈深度</a> ·
<a href="docs/功能清单.csv">功能清单</a>
</p>
<img src="assets/hero.jpg" alt="AnythingBUAA" width="820" />
<div align="center"><pre><b>npm start</b></pre></div>
</div>
> [!IMPORTANT]
> 本项目仅用于**个人账号**下的校园服务自动化与接口学习研究。请只在自己的账号、自己的数据范围内使用,遵守学校信息系统使用规定。仓库已排除个人消息库、Cookie、凭证等一切敏感内容;涉及的加密密钥均来自公开项目,非本项目新披露。
---
你有没有过这种时刻:想订个羽毛球场,要打开 i北航 → 翻到智慧场馆 → 选校区 → 选日期 → 点时段 → 过验证码 → 付款,七八步;查个课表、交个作业、评个教,各自又是一套入口。这些系统各有各的登录、各有各的加密,彼此不通。
AnythingBUAA 把它们收敛成一层:你(或你的 AI 助手)说"订后天下午学院路的羽毛球",剩下的交给网关——它知道该调哪个系统、怎么登录、怎么签名、怎么过验证码。
<div align="center"><img src="assets/how-it-works.jpg" alt="工作原理" width="820" /></div>
## 一切皆 MCP
核心理念只有一句:**把校园里每一件事,都抽象成一个 MCP 工具。**
一边是五花八门、互不相通的校园系统——各自的登录、各自的加密、各自的验证码;另一边是 AI 助手只认一种语言:MCP。AnythingBUAA 做的就是把前者全部翻译成后者。于是场馆、选课、作业、评教、网盘、课表、校车、挂号……在 AI 眼里不再有边界,全都是一句话能调用的工具。
<div align="center">
| 内容全 | 覆盖广 | 技术深 |
| :---: | :---: | :---: |
| **430** 项功能测绘 | **11** 个子系统打通 | **8** 种密码学原语手写 |
| **674** 条服务知识库 | **26** 个 MCP 工具 | **11** 套鉴权链路逆向 |
| **76** 项一句话办成 | 教务·生活·财务·IT·党群·科研·就业 全覆盖 | 场馆 **3** 把锁全破 |
</div>
## 能做什么
26 个工具,覆盖 11 个子系统。下面是其中几条真正"办成"的链路:
| 你说的话 | 网关做的事 |
| --- | --- |
| 「订后天下午学院路羽毛球」 | 智慧场馆 cgyy:查余位 → 点选验证码(本地 OCR)→ 加密下单 |
| 「这周有哪些博雅课能选」「选 123 号课」「帮我签到」 | 博雅 bykc:AES-ECB+RSA 信封请求,查/选/退/签到签退 |
| 「把这个 PDF 交到智学的第 3 次作业」 | SPOC:分块上传文件 → 提交作业 |
| 「把这学期的教评都评了,好评」 | 评教 TES:取任务 → 填问卷 → 批量提交 |
| 「我今天智慧教室有课吗,签个到」 | iClass:离校自动走 WebVPN 代理,扫码签到 |
| 「网盘里那个文件给我下载链接」 | 北航云盘(AnyShare):OAuth 登录,列目录/下载直链 |
| 「查成绩 / 课表 / 空教室 / 校车 / 挂号 / 门禁申请…」 | 融合门户 + 办事大厅:CASTGC 直连聚合接口 |
还有一个语义路由工具 `ibeihang_smart_intent_router`:把 674 条服务目录(融合门户 278 + 办事大厅 325 + 工作台 93)配上同义词层,自然语言进去,命中的入口、规则、办理方式出来。
## 快速开始
<div align="center"><pre>
git clone https://github.com/Oblivionfun/AnythingBUAA.git
cd AnythingBUAA
<b>npm start</b> # Node 18+,无需 install(零第三方依赖)
</pre></div>
就这样。首次运行 `npm start` 会**在终端里直接引导你登录**——输入学号和统一认证密码,换取会话 Cookie(仅驻留内存、不落盘),然后起服务。无需编辑任何文件。
<div align="center"><img src="assets/terminal.jpg" alt="npm start" width="720" /></div>
然后把任意 MCP 客户端(Cursor / Claude Desktop / 自研 Agent)指向它,参考 [`examples/mcp-client.json`](examples/mcp-client.json):
```json
{ "mcpServers": { "anything-buaa": { "type": "streamable-http", "url": "http://127.0.0.1:4050/mcp" } } }
```
场馆自动下单需要本地验证码识别(一次性):
```bash
npm run captcha:setup # 建 .venv 并安装 ddddocr
```
## 架构
<div align="center"><img src="assets/architecture.jpg" alt="架构" width="820" /></div>
自然语言进来,经意图路由命中工具;网关统一处理登录、签名、验证码与会话(多租户隔离、密码只驻留内存);校外访问自动经 WebVPN 代理。双协议对外:标准 **MCP**(JSON-RPC over Streamable HTTP)与 **REST**。
## 技术栈深度
每接一个子系统,都意味着啃下一整套独立的登录与加密。这些全部被逆向、用 Node 内置 `crypto` 重写、并对齐开源项目的官方测试向量:
| 维度 | 已拿下 |
| --- | --- |
| **鉴权链路** | 11 套互不相同:CASTGC 激活 · CAS 重定向取 token · Inco-token · Authorization token · `sso-token → login → roleLogin` · AnyShare OAuth2(Hydra challenge)· PHP 序列化 `_token` · `loginName → Sessionid` · 企业微信 OAuth · Srun 挑战应答 · **WebVPN 跨域凭证闭环** |
| **密码学原语** | 8 种手写:AES-128 ECB / CBC / CFB · RSA-PKCS1v15 · HMAC-MD5 · SHA1 · MD5 签名 · Srun xencode |
| **场馆下单三把锁** | MD5 请求签名 · 点选验证码(本地 OCR 定位 + AES-ECB 加密坐标)· AES-CBC 加密 `orderPin` — 三把全破 |
| **离校直达** | WebVPN 会话闭环,把内网限定的 iClass 等系统代理出校园网 |
| **服务测绘** | 430 项功能分级 · 674 条服务知识库 · 93 个工作台应用 · 575 项办事大厅事项 |
工程上刻意做成**单文件、零第三方依赖**——整套网关就一个 `.mjs`,加密全看得见、好审计、好改。详细分层与每个子系统的加密信封见 [`docs/DESIGN.md`](docs/DESIGN.md),完整能力分级见 [`docs/功能清单.csv`](docs/功能清单.csv)。
## 升级
零第三方依赖,升级就是拉代码重启——无需 `npm install`:
```bash
cd AnythingBUAA
git pull
npm start # 会话 Cookie 复用,通常不再问密码
```
版本号见启动横幅(`v1.1.0`)或 `package.json`;每个版本的改动见 [CHANGELOG.md](CHANGELOG.md)。想停在某个版本:`git checkout v1.1.0`。
## 致谢
接口与加密的还原,站在这些开源项目的肩膀上:
- [fontlos/buaa-api](https://github.com/fontlos/buaa-api) — 博雅/智学/教务/选课/评教/校园网/云盘/直播课堂的 Rust 实现与加密细节。
- wanghao6736/BH_CGYY — 智慧场馆的签名算法与点选验证码识别管线。
- 超星图书馆空间预约 v4 — 图书馆座位系统的接口。
## 免责声明
- 本项目用于**个人账号**下的校园服务自动化与接口学习研究,请仅在自己的账号、自己的数据范围内使用。
- 不含任何他人数据;仓库已排除个人消息库、Cookie、凭证等敏感内容。
- 涉及的加密密钥均来自上述公开项目,非本项目新披露。
- 请遵守学校的信息系统使用规定,勿用于批量抢占公共资源或任何违反规定的用途。使用后果自负。
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues