# Lianghua Pages — AI 安装与快速上手

> 这份文档写给 AI 编程助手（Claude Code、Cursor、Codex 等）。用户让你"阅读 https://page.lianghua.io/AGENTS.md 并安装"时，按下面的步骤操作，每一步完成后简要告诉用户结果。

Lianghua Pages 让员工在 AI 工具里生成网页小工具，并一键发布到 `https://page.lianghua.io/<uuid>`。平台负责统一头部（logo、页面能力说明、主题切换）、登录、数据存储和员工 memory；页面只需要是一个单文件 HTML。

安装包含三步：**拿到 token → 配置 MCP → 安装 skill**。

---

## 第 1 步：获取访问令牌（token）

- token 以 `pk_` 开头，由管理员发放。**先问用户要**，不要自己编造。
- 把 token 放在环境变量 `LIANGHUA_PAGES_TOKEN` 里，**不要**写进任何项目仓库里的文件、不要提交到 git、不要在回复里完整回显。
- 如果用户的 shell 配置里还没有这个变量，建议用户自己把下面这行加到 `~/.zshrc` / `~/.bashrc`（或者由你追加，追加前先征得同意）：

  ```bash
  export LIANGHUA_PAGES_TOKEN="pk_xxx"
  ```

同一个 token 也可以在 https://page.lianghua.io/login 登录网页，查看自己的页面、memory 和授权。

## 第 2 步：配置 MCP

- 传输方式：Streamable HTTP
- 地址：`https://page.lianghua.io/mcp`
- 鉴权：请求头 `Authorization: Bearer <token>`
- 服务名建议用 `lianghua-pages`

### Claude Code

```bash
claude mcp add --transport http --scope user lianghua-pages https://page.lianghua.io/mcp \
  --header "Authorization: Bearer ${LIANGHUA_PAGES_TOKEN}"
```

（`--scope user` 让所有项目都能用。已存在同名配置时先 `claude mcp remove lianghua-pages --scope user`。）

### Cursor

编辑 `~/.cursor/mcp.json`（没有就新建；已有内容时合并，不要覆盖其他 server）：

```json
{
  "mcpServers": {
    "lianghua-pages": {
      "url": "https://page.lianghua.io/mcp",
      "headers": { "Authorization": "Bearer ${env:LIANGHUA_PAGES_TOKEN}" }
    }
  }
}
```

### Codex CLI

在 `~/.codex/config.toml` 中追加：

```toml
[mcp_servers.lianghua-pages]
url = "https://page.lianghua.io/mcp"
bearer_token_env_var = "LIANGHUA_PAGES_TOKEN"
```

### 其他支持远程 MCP 的工具

填写上面的地址和请求头即可。如果工具只支持 stdio，可以用 `mcp-remote` 桥接：

```bash
npx -y mcp-remote https://page.lianghua.io/mcp --header "Authorization: Bearer ${LIANGHUA_PAGES_TOKEN}"
```

### 验证

配置后可能需要重启工具或新开会话。调用 MCP 工具 `whoami`，能返回用户的姓名和邮箱即表示配置成功。也可以直接用 curl 检查 token：

```bash
curl -s https://page.lianghua.io/mcp -H "Authorization: Bearer ${LIANGHUA_PAGES_TOKEN}" -H "content-type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}}'
```

返回 401 表示 token 无效或已吊销，请让用户联系管理员。

## 第 3 步：安装 skill

skill 包含页面规范、视觉规范和 PageKit 能力 SDK 文档。**写页面前必须遵守 skill。**

### Claude Code

```bash
mkdir -p ~/.claude/skills/lianghua-pages/reference
curl -fsSL https://page.lianghua.io/skill/SKILL.md -o ~/.claude/skills/lianghua-pages/SKILL.md
curl -fsSL https://page.lianghua.io/skill/reference/sdk.md -o ~/.claude/skills/lianghua-pages/reference/sdk.md
curl -fsSL https://page.lianghua.io/skill/reference/design.md -o ~/.claude/skills/lianghua-pages/reference/design.md
```

### 其他工具

把同样三个文件下载到该工具的规则或知识目录（例如 Cursor 可放到 `~/.cursor/rules/lianghua-pages/`），或者在需要时直接读取：

- https://page.lianghua.io/skill/SKILL.md
- https://page.lianghua.io/skill/reference/sdk.md
- https://page.lianghua.io/skill/reference/design.md

skill 会随平台更新；重新执行上面的下载命令即可升级。

---

## 快速上手

安装完成后，用户可以直接说：

- "做一个团队午饭投票的小工具并发布"
- "把这份 CSV 做成可筛选的表格页面发出来"
- "做一个读书清单页面，用我的 memory 记住我读过的书"

你的工作流程（详见 SKILL.md）：

1. 判断需要哪些能力：纯展示不需要能力；需要知道是谁 → `identity`；个人数据 → `storage`；多人共享数据 → `db`；员工 memory → `memory`。不确定时调用 `list_capabilities`。
2. 按 skill 的规范写一个单文件 HTML。
3. 调用 `validate_page` 自检，修复所有 error 和相关 warning。
4. 调用 `publish_page`，把返回的 `url` 发给用户。
5. 修改页面时：先 `get_page` 拿到最新 HTML 和 `current_version`，改完后用 `update_page`（`base_version` = 刚才拿到的版本号）。URL 保持不变。

最小示例：

```json
{
  "name": "publish_page",
  "arguments": {
    "title": "Hello",
    "description": "第一个页面",
    "html": "<!doctype html><html><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>Hello</title></head><body><main class=\"pk-container\"><div class=\"pk-card\"><h1>你好 👋</h1><p class=\"pk-muted\">这是我的第一个页面。</p></div></main></body></html>"
  }
}
```

## MCP 工具一览

| 工具 | 用途 |
|---|---|
| `whoami` | 验证配置，返回当前员工 |
| `list_capabilities` | 可声明的能力、配置和 PageKit API |
| `validate_page` | 发布前检查 |
| `publish_page` | 发布新页面 → 返回 URL |
| `get_page` | 读取页面源码和当前版本 |
| `update_page` | 更新页面（乐观锁 `base_version`） |
| `list_pages` / `list_versions` | 我的页面 / 历史版本 |
| `rollback_page` | 回滚到历史版本 |
| `delete_page` | 删除页面（仅在用户明确要求时） |
| `data_list` / `data_put` / `data_delete` | 读写页面共享数据（db 能力，仅作者） |
| `memory_list` / `memory_save` / `memory_delete` | 读写当前员工的 memory |
