UniDoc说明中心下载 .udoc
UNIDOC / KNOWLEDGE IN MOTION

AI MCP 接入指南

从理解,到动手实现。步骤、协议与可复制的示例,都在这份文档中。

1. 客户端配置

MCP 客户端只需要服务地址,不需要部署 UniDoc 源码:

{
  "mcpServers": {
    "unidoc": {
      "url": "https://app.unidoc.top/mcp",
      "oauth": {
        "authorizationServer": "https://app.unidoc.top/.well-known/oauth-authorization-server",
        "scopes": ["mcp:read", "mcp:write"]
      }
    }
  }
}

支持 OAuth 动态注册的客户端直接按发现文档完成注册、S256 PKCE、UniDoc 登录和授权确认。
客户端实现固定回调时,可由部署者设置 UNIDOC_MCP_REDIRECT_URIS(JSON 字符串数组),例如:

UNIDOC_MCP_REDIRECT_URIS=["https://ai.example.test/oauth/callback"]

不要把真实 token、会话 Cookie 或生产密钥写入配置文件、仓库、日志或提示词。

2. 推荐调用顺序

  1. initialize
  2. tools/list
  3. unidoc_open_document(传入已获取的 UDoc JSON)
  4. unidoc_list_blocks / unidoc_list_comments
  5. 读取目标段落和当前 revision
  6. 执行一个带 expectedRevision 与稳定 requestId 的写操作
  7. 冲突时重新读取,不要盲目覆盖
  8. 需要下载时调用 unidoc_export_udoc

若任务是“把这份 HTML 发布成网站”,直接使用下面的网站发布流程,无需先调用
unidoc_open_document

示例:

{
  "jsonrpc": "2.0",
  "id": 10,
  "method": "tools/call",
  "params": {
    "name": "unidoc_create_comment",
    "arguments": {
      "documentId": "doc_…",
      "paraId": 42,
      "start": 12,
      "end": 25,
      "text": "请补充这一段的来源。",
      "author": "AI 审阅",
      "expectedRevision": 3,
      "requestId": "review-20260912-42-1"
    }
  }
}

3. AI 直接发布 HTML 网站

网站发布使用独立授权范围。客户端配置示例:

{
  "mcpServers": {
    "unidoc": {
      "url": "https://app.unidoc.top/mcp",
      "oauth": {
        "authorizationServer": "https://app.unidoc.top/.well-known/oauth-authorization-server",
        "scopes": ["mcp:read", "mcp:publish"]
      }
    }
  }
}

mcp:read / mcp:write 授权不包含网站发布。客户端应完成包含 mcp:publish 的授权,
然后读取 tools/list,确认服务器提供 unidoc_publish_website。这是补充发布权限;已有
UniDoc 登录会话有效时无需重新登录。单独的浏览器 Cookie 也不会被提升为发布授权。

{
  "jsonrpc": "2.0",
  "id": 20,
  "method": "tools/call",
  "params": {
    "name": "unidoc_publish_website",
    "arguments": {
      "html": "<!doctype html><meta charset=\"utf-8\"><title>实验课堂</title><h1>实验课堂</h1><button onclick=\"this.textContent='已开始'\">开始</button>",
      "title": "实验课堂",
      "requestId": "classroom-page-20260916-v1"
    }
  }
}

这是立即公开发布操作。服务端为显式提交内容保存账户归属的 .udoc 来源,再返回独立
公网 URL;AI 不需要浏览器 Cookie、OmniDoc 上传签名或服务器 SSH 权限。网络超时后以
同一个 requestId 和原参数重试;修改内容应使用新 ID,不要用随机 ID 重放同一次发布。

baseUrl 可选,仅用于解析资源相对地址,不抓取网页。本地相邻文件需内联或改为可公开
访问的 HTTPS 地址;前端工程应提交构建产物中的 HTML,后端服务和原网站的登录状态
不会随 HTML 迁移。取得 URL 后实际打开页面,检查按钮和资源加载,再向用户报告完成。

发布结果包含 siteIdurlstatus:"published"contentSha256bytes
createdAtreplayedsource:{"kind":"udoc","persisted":true}
后续使用 unidoc_get_website({"siteId":"…"}) 查询发布信息,使用
unidoc_export_website({"siteId":"…"}) 取回来源 .udoc。这两个工具校验账户归属。
导出结果的 fileNamemimeTypebase64 描述原生文件;将 base64 解码后保存为返回的
.udoc 文件名。完整说明与重试规则见 AI 网页发布说明

4. 与编辑器、iframe 和 WASM 的关系

MCP 是可选的 AI 控制平面:它不参与编辑器启动,不改变页面排版,也不取代 iframe 整档
桥。iframe 适合宿主加载/读取整份 HTML 或 UDoc;MCP 适合 AI 按 para_id、批注 ID 和
revision 做局部读写。WASM 离线兜底仍只加载通用编译器,不包含 MCP token、Rust 后端源码
或账号数据。

当前 unidoc_open_document 的会话是进程内隔离会话,完成一次转换或审阅后可导出 UDoc;
如果需要把写入绑定到云文稿,应由宿主先完成账号授权和文稿存取,再把最新 UDoc 交给 MCP,
或在后续版本接入同一账号授权的持久存储。网站发布工具使用独立的持久来源与发布收据,
不会依赖这个进程内文稿会话存活。