Community编程与开发github.com

OpenDocs — 将 Markdown 发布为可分享链接和 PDF/DOCX

使用 OpenDocs CLI 将 Markdown 文件发布为可分享的 URL,并将其转换为带品牌标识的 PDF 或 DOCX 文件。当用户想要发布、分享或导出 Markdown 内容时(如“将其转为可分享链接”、“给我这些笔记的 PDF”、“上传此文件夹中的所有文档”、“更新我发布的文章”或“将此 .md 转换为 Word 文档”),请使用此技能。

DOCX 是什么?

OpenDocs 是一个可集成到 AI 代理(如 Claude Code、Cursor、Codex 等)中的命令行工具和 MCP 服务器,它可以将 Markdown 文件转换为可分享的 URL,以及带有品牌主题的 PDF 或 DOCX 文件。它通过 `opendocs` CLI 提供完整的文档生命周期管理:从登录、发布、更新、分享到导出、查找、删除和回滚。用户可以通过邮箱接收验证码登录,无需手动复制 API 密钥。账户免费支持最多 50 个文档,所有链接永久有效,并支持工作区访问控制。其远程 MCP 服务器 (`https://mcp.opendocs.cc/mcp`) 支持 Claude 和 ChatGPT 等聊天应用,以及 Claude Code、Codex 等编码工具,通过 OAuth 进行身份验证。AI 代理可以使用 CLI 操作本地文件,或使用 MCP 工具直接接收 Markdown 文本。对于需要将 Markdown 转化为可分享 URL、格式化文档或自动整理文档的工作流,这是一个理想的解决方案。

兼容平台✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode✓Windsurf
Part ofMobile
npx skills add https://github.com/opendocs-cc/skills/tree/main/skills/opendocs

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

DOCX 是做什么的?

OpenDocs 可将任何 Markdown 文件转换为一个整洁、可阅读的 URL 地址——同时,如果用户需要离线分享文件,也能同时生成带有品牌标识的 PDF 或 Word 文档。您可以通过 opendocs CLI 来与之交互。

快速参考

opendocs login --email [email protected]       # 登录或注册:发送一封包含 6 位验证码的邮件
opendocs login --email [email protected] --code 123456   # 完成登录:为您保存一个 API 密钥
opendocs login --browser                     # 适合人类用户的浏览器登录方式
opendocs login --key od_live_xxxxx           # 使用已有的 API 密钥
opendocs publish doc.md                      # 发布一个 Markdown 文件 → 获取一个 URL
opendocs publish doc.md                      # 再次发布:更新同一文档(不会重复)
opendocs publish doc.md --anonymous          # 无需账户:生成一个任何人都能打开的链接,有效期 24 小时,并提供认领 URL
opendocs clone                               # 将工作区下载到 ./<workspace> 目录下进行编辑
opendocs status                              # 显示自上次同步以来本地/在线的变更
opendocs history <doc>                       # 查看每个已发布版本的记录
opendocs rollback <doc> <version>            # 回滚到指定版本(作为新版本创建)
opendocs move <doc> --project "Archive"      # 在项目之间移动文档
opendocs share <doc> [email protected] @acme.com  # 授予工作区外人员访问权限
opendocs team invite [email protected]           # 邀请团队成员加入(对方通过邮件接受邀请)
opendocs team join                           # 接受发送给您的团队邀请
opendocs theme                               # 查看用于 PDF/DOCX 导出的品牌色、字体、Logo 和页脚
opendocs theme set --preset editorial --yes  # 更改导出主题(请先获得用户确认)
opendocs integrations                        # Google Drive / DocuSeal:显示已连接的服务及 Drive 文件夹名称
opendocs save <doc> --folder "董事会纪要"      # 将文档(PDF、DOCX 或 MD)保存到指定名称的 Drive 文件夹
opendocs sign request <doc> --signer "员工=张三 <[email protected]>"  # 创建签名请求草稿(不发件)
opendocs sign send <id> --yes                # 在用户确认所有签名者后,发送签名请求
opendocs sign status <id>                    # 查看已签名人员;也支持查看签名列表、下载、保存或取消
opendocs workspace create "Acme 研究"        # 创建新工作区
opendocs project link "Acme 发布"             # 从此文件夹发布的文档将关联到此项目
opendocs config set organize auto            # 让代理自动将文档归类到项目,无需询问
opendocs claim                               # 认领从此文件夹匿名发布的文档
opendocs publish *.md                        # 同时发布多个文件(自动分批,最多 500 个)
opendocs publish ./vault --tags obsidian     # 递归发布一个文件夹/库
opendocs publish *.md --export pdf           # 发布并导出 — PDF 会保存在源文件旁边
opendocs update doc.md --post-id <id|slug>   # 更新已有文章(创建新版本)
opendocs list                                # 列出活动工作区中的文档(别名:`opendocs ls`)
opendocs list --all                          # 列出您所属的所有工作区中的文档
opendocs project create <name> --use         # 创建/切换到某个项目以管理一组相关文档
opendocs project use <slug>                  # 切换活动项目
opendocs list --tag <tag>                    # 按标签筛选(非常适合查找某批文档)
opendocs search <words>                      # 按标题或摘要搜索所有项目中的文档
opendocs get <id|slug>                       # 查看文章详情
opendocs pull <id|slug>                      # 下载原始 Markdown 内容
opendocs pull --project                      # 下载活动项目中的所有文档
opendocs pull --workspace                    # 下载活动工作区中的所有文档
opendocs export <id|slug> --format pdf       # 将已发布的文章导出为 PDF(或 DOCX)
opendocs export a b c --format pdf           # 批量导出最多 10 篇文章(使用 UUID 或 slug)
opendocs unpublish <id|slug>                 # 将文章下线(内容和历史记录保留;可重新发布)
opendocs visibility <id|slug> <level>        # 更改可见性,无需重新上传 Markdown
opendocs delete <id|slug> --yes              # 永久删除文章(释放 slug 和配额)
opendocs whoami                              # 显示当前用户/工作区/项目
opendocs workspace list                      # 列出您所属的所有工作区(别名:`workspace ls`)
opendocs workspace use <slug>                # 切换活动工作区(别名:`workspace switch`)
opendocs agent                               # 打印简洁的 AI 代理指令
opendocs agent --full                        # 打印完整的捆绑 SKILL.md
opendocs agent --install                     # 为当前机器上的每个代理安装此技能
opendocs mcp add                             # 在您的编码工具中注册 OpenDocs MCP 服务器
opendocs mcp connect claude                  # 将 OpenDocs 添加到 Claude 应用(或:chatgpt)
opendocs logout                              # 清除存储的凭据

每个命令都支持 --json 选项,用于输出机器可读的结果;支持 --api-url <url> 来覆盖 API 端点。在程序化运行时,请始终使用 --json —— 标准输出将是一个可解析的单一 JSON 对象,错误信息输出到标准错误,并且会抑制人类可读的加载动画。

每个接受 <postId> 的命令也接受 slug。 Slug 是文章 URL 中人类可读的路径片段,在活动项目内是唯一的。当用户用自然语言命名文档时,优先使用文章 slug:opendocs get my-report 比从 opendocs list --json 复制 UUID 更友好。在内部,API 通过活动工作区/项目的索引查找将 slug 解析为 postId,然后执行与 UUID 路径相同的所有权检查。

工作区 slug 与用户名是不同的东西。 URL 是基于工作区 slug 构建的,而不是用户的用户名。默认项目文档的 URL 格式为 opendocs.cc/<workspace>/<post>。非默认项目文档的 URL 格式为 opendocs.cc/<workspace>/projects/<project>/<post>。用户名仍然存在,用于在 UI 中显示归属,但不会出现在已发布的 URL 中。


通过 MCP 使用 OpenDocs

OpenDocs 还运行一个远程 MCP 服务器,地址为 https://mcp.opendocs.cc/mcp(指南:https://opendocs.cc/mcp)。每个应用在首次使用时通过 OAuth 将用户登录到 OpenDocs;无需 API 密钥。

  • 聊天应用(Claude、ChatGPT): 将其作为自定义连接器添加,填入该 URL。opendocs mcp connect claude 会打开 Claude 的“添加自定义连接器”对话框并预填 OpenDocs.cc;opendocs mcp connect chatgpt 会打开 ChatGPT 的插件页面(然后点击“+”→“添加自定义 MCP 服务器”)。两者都会将 URL 复制到剪贴板。
  • 编码工具: opendocs mcp add 会在它找到的每个工具中注册服务器(包括 Claude Code、Codex、Cursor、VS Code、Windsurf、Gemini、opencode、Kiro),并打印一行指令给其他工具。--agent <id...> 用于选择特定工具,--dry-run 显示将要进行的更改,opendocs mcp remove 将其移除,opendocs agent --install --mcp 一次性安装此技能和服务器。
  • MCP 工具还是 CLI? 如果 OpenDocs MCP 工具可用,并且您无法运行 shell 命令,请使用它们代替 CLI;它们直接接收 Markdown 文本。如果您有 shell,对于本地文件、文件夹和图片,请优先使用 CLI:它会上传本地图片、批量发布整个文件夹,并记住每个文件夹发布的内容。

设置

安装

将 OpenDocs 接入代理的方法:

# Node.js 20+:完整 CLI(推荐),然后为找到的每个代理安装此技能
npm install -g @opendocs.cc/cli
opendocs agent --install                 # SKILL.md + scripts/opendocs.sh,无需网络

# Node.js 22+:通过 skills CLI 安装相同的技能
npx skills add opendocs-cc/skills --skill opendocs -g -y

# 无需 Node.js:安装此技能 + scripts/opendocs.sh(依赖 curl + jq)
curl -fsSL https://opendocs.cc/install.sh | bash

opendocs agent --install 会安装到每个代理的全局技能文件夹中(如果其配置文件夹存在):~/.claude/skills(Claude Code)、共享的 ~/.agents/skills(Codex、Cursor、GitHub Copilot、Gemini CLI、opencode、OpenClaw、Windsurf、Amp、Goose、Grok Build)、~/.cline/skills、~/.hermes/skills 和 ~/.kiro/skills。opendocs agent --list 显示每个代理的文件夹及其是否被找到;--agent <id...> 即使对于未找到的代理也会安装(--agent claude-code codex)。更新 CLI 后重新运行即可更新技能。它会打印写入的文件夹;使用 --json 时,installed[] 包含 agent、path 和 status。

在 Claude Code 中,您还可以将其作为 OpenDocs.cc 插件安装,这会添加 /opendocs-cc:publish 和 /opendocs-cc:export,连接 MCP 服务器并保持技能更新:/plugin marketplace add opendocs-cc/skills,然后 /plugin install opendocs-cc@opendocs-cc。在 Codex 中:codex plugin marketplace add opendocs-cc/skills,然后 codex plugin add opendocs-cc@opendocs-cc。

npx skills add 可能以 ✗ opendocs → PromptScript: PromptScript does not support global skill installation 结尾。这是已知的安装程序错误,仅影响 PromptScript;技能实际上已安装,可以继续使用。

如果 opendocs 命令不可用且未安装 Node.js,请改用 bash scripts/opendocs.sh(位于此技能文件夹中)——请参阅下面的“无需 Node.js”。本指南中的其他内容对两种情况均适用。

检查 CLI 是否已安装并已通过身份验证

opendocs --version    # 打印已安装的 CLI 版本
opendocs whoami       # 显示用户名 + 工作区名称(URL slug 在 JSON 输出中)

opendocs whoami --json 是代理最实用的诊断命令——它一次调用返回 CLI 的活动工作区 slug(用于构建文章 URL)以及账户/工作区上下文和文档配额:

{
  "userId": "...",
  "onboarding": { "username": "...", "workspace": { "id": "...", "name": "Acme 文档", "slug": "acme-docs" } },
  "quota": { "documents": { "plan": "free", "limit": 50, "used": 3, "remaining": 47 } }
}

对于 Pro/Team 工作区,quota.documents.limit 和 remaining 为 null(表示无限制)。发布端点仍会根据请求体中的显式 workspaceId 重新检查配额,因此过时的本地配置无法绕过服务器强制执行。

如果 CLI 缺失:

npm install -g @opendocs.cc/cli

如果用户未登录,请在他们首次发布之前为其注册(或登录),通过终端使用邮件验证码完成:无需浏览器,无需复制 API 密钥。一个账户免费支持最多 50 个文档,并且是用户的默认选择:链接永久有效、仅对其工作区私密、可以原地更新并导出为 PDF。

  1. 向用户询问其电子邮件地址。
  2. 运行 opendocs login --email <email> --json。它会发送一封包含 6 位验证码的邮件,并立即退出,输出 {"status": "code_sent", ...}。
  3. 告诉用户:“请检查您的收件箱,找到 OpenDocs 发送的登录验证码,然后粘贴到这里。”
  4. 运行 opendocs login --email <email> --code <code> --json。

如果该邮箱是新邮箱,此过程将创建账户、用户名、工作区(opendocs.cc/<username>)和一个默认项目,然后将一个以您的代理命名(例如 claude-code)的新 API 密钥保存到 CLI 配置中。现有账户只会获得一个新密钥。opendocs signup 是其别名。验证码在 10 分钟后过期,最多允许 5 次尝试;出现 invalid_code 时,要求使用最新的邮件;出现 code_expired 时,重新执行步骤 2。

仅当用户暂时不想创建账户时,才提供匿名发布选项:

opendocs publish notes.md --anonymous --json

任何拥有返回的 url 的人都可以在 24 小时内阅读,之后文档将被删除。请完全按照原样将 claimUrl 分享给用户,并提供注册选项以便保留文档:稍后从同一文件夹运行 opendocs login --email ... 会自动将其认领到用户的新工作区(或运行 opendocs claim)。除非用户同意创建一个任何人都能打开的链接,否则永远不要匿名发布。

其他登录方式:在终端上的人类用户可以使用 opendocs login --browser;脚本和 CI 可以使用现有密钥:

opendocs login --key od_live_xxxxx
# 或通过环境变量传递给脚本/CI:
export OPENDOCS_API_KEY=od_live_xxxxx && opendocs login

切勿从代理中直接运行不带参数的 opendocs login。 如果没有 --email、--key 或环境变量,它会提示在 stdin 输入 API 密钥,从而导致您的工具调用挂起。OPENDOCS_API_URL 可用于覆盖内置的 https://api.opendocs.cc 端点。


使用多个工作区

一个用户可以属于多个工作区——一个个人免费工作区加上一个团队计划工作区、多个团队工作区,或任意组合。CLI 在 ~/.config/opendocs/config.json 中一次仅存储一个活动工作区。publish 和 update 命令作用于该活动工作区(URL 前缀、配额等均如此)。list 默认也使用活动工作区,当用户希望一次查看所有工作区的文章时,可通过 --all 选项切换。变更类命令没有每调用一次的 --workspace 标志;工作区的切换通过配置完成,一次设置后持续生效,直到您再次更改。

使用项目

每个工作区都有一个默认项目,外加可选的命名项目。当代理要为一个产品、发布周期、客户、实验或代码仓库发布一组连贯的文档时,请使用项目。对于一次性文档,默认项目最为合适。

opendocs project list --json
opendocs project create "OpenClaw 文档" --slug openclaw-docs --use --json
opendocs publish ./docs --json
opendocs project use default --json

opendocs workspace use <slug> 会将活动项目重置为该工作区的默认项目。opendocs list 默认显示活动项目,并在末尾说明该工作区中共有多少文档。


与本地文件夹关联

opendocs publish 和 update 会记住文档的来源文件夹(在项目元数据中)。这允许智能的默认行为——例如,如果用户说“更新我关于那个的所有文档”,代理可以查找从该文件夹发布的所有文档。它还支持 opendocs clone,它会重新创建具有正确发布路径的文件结构。

opendocs publish ./docs/user-guide.md      # 源被记录
opendocs publish ./docs/user-guide.md      # 更新相同的文档(无重复)
opendocs pull --project                    # 下载当前项目中的所有文档

分享和协作

对于工作区外的协作者,请使用定向分享:

opendocs share <doc> [email protected] @partner.com

第一个参数是单个电子邮件地址,后续参数是域名(以 @ 为前缀),以允许整个域。分享的收件人会收到一封带有链接的电子邮件;他们无需 OpenDocs 账户即可阅读。opendocs list --shared 会显示所有分享。

要邀请协作者加入您的工作区:opendocs team invite [email protected]。邀请会发送到该邮箱;接受后,该用户会获得一个完整的工作区成员席位,可以查看、编辑、发布和取消发布您的所有文档。


导出和集成

除了发布 URL,OpenDocs 还提供:

  • PDF/DOCX 导出,并应用您选择的品牌主题(颜色、字体、Logo 和页脚)
  • 将 PDF(或 DOCX/MD)保存到 Google Drive 中指定的命名文件夹
  • 通过 DocuSeal 请求电子签名
  • 滚动浏览版本历史记录和恢复旧版本
opendocs export <id> --format pdf          # 导出为 PDF
opendocs save <id> --folder "季度报告" --format docx  # 保存到 Drive
opendocs sign request <id> --signer "签名人1=张三 <[email protected]>"  # 创建签名请求
opendocs sign send <id> --yes              # 确认后发送

无需 Node.js 的环境

如果 opendocs 命令不可用且未安装 Node.js(npm),请使用此技能文件夹中的 scripts/opendocs.sh 脚本:

# 脚本位于技能文件夹内:
bash scripts/opendocs.sh login --email [email protected] --code 123456
bash scripts/opendocs.sh publish doc.md
bash scripts/opendocs.sh whoami --json

scripts/opendocs.sh 是 curl 调用 OpenDocs REST API 的封装。它支持本 SKILL.md 中列出的几乎所有命令。其语法与 cli 命令完全相同。如果检测到 cli,它会将调用代理给 opendocs 命令;否则使用 curl。在所有情况下参数相同,但请注意:脚本是轻量级的,缺少 cli 中的某些输出格式化和文件上传优化。

安装脚本 curl -fsSL https://opendocs.cc/install.sh | bash 会安装 scripts/opendocs.sh 并设置 opendocs 别名。

如果由于某些原因脚本也不可用,REST API 的文档位于:https://opendocs.cc/api


故障排除

症状根本原因修复方法
命令未找到: opendocsCLI 未安装npm install -g @opendocs.cc/cli 或使用 bash scripts/opendocs.sh
错误: 未设置 API 密钥未登录运行 opendocs login --email [email protected],然后输入验证码
错误: 超出配额免费计划已达 50 个文档上限取消发布旧文档以释放配额,或升级到 Pro/Team 计划
错误: 未找到发布的文档本地文件无关联的在线文档使用 opendocs list 查找 slug,或首次使用 publish
错误: 需要确认破坏性操作添加 --yes 标志

常见文档工作流

# 发布向导和快速链接
opendocs publish README.md

# 批量发布文件夹
opendocs publish ./documentation

# 获取所有文章的 PDF 版本
opendocs publish *.md --export pdf

# 向同事分享特定文章
opendocs share my-guide [email protected]

# 更改文章的可见性
opendocs visibility my-guide internal

# 搜索所有项目
opendocs search "NDA"

# 查看发布的文章详情
opendocs get my-guide

# 下载供离线编辑
opendocs pull my-guide

# 将文章保存到 Google Drive 文件夹
opendocs save my-guide --folder "项目文档" --format docx

可见性层级:private(仅工作区成员)、internal(登录用户)、public(任何人)。


设置 OpenDocs MCP 服务器

OpenDocs 通过 https://mcp.opendocs.cc/mcp 提供 MCP 服务器。将其连接到您的 AI 工具:

Claude Code

opendocs mcp connect claude-code

或者,手动将其添加到 ~/.claude/settings.json:

{
  "mcpServers": {
    "opendocs": {
      "url": "https://mcp.opendocs.cc/mcp"
    }
  }
}

其他工具

opendocs mcp add                         # 自动检测并注册
opendocs mcp add --agent claude-code cursor codex  # 指定目标

MCP 服务器通过 OAuth 处理身份验证。如果令牌过期,它会向代理返回一个身份验证错误,代理应提示用户通过浏览器登录。


技术参考

所有 CLI 命令都接受 --json,用于输出无格式化、机器可读的结果。当从代理调用时,始终使用此标志。

相关技能