Owl web 词典

Owl 是一个自托管的 MDX / MDD Web 词典。它面向个人查词、公开词典共享、用户私有词典管理,以及 AI 客户端通过 MCP 查询词典的场景。


用户可以做什么

查词与阅读

  • 在浏览器中直接查询 MDX 词典。

  • 未登录用户可以查询已启用的公开词典

  • 登录用户可以查询公开词典,以及自己上传的私有词典。

  • 支持查询全部可用词典,也可以筛选到某一本词典。

  • 支持搜索建议和键盘导航。

  • 支持点击词条内部链接,继续跳转查询相关词。

  • 支持渲染 MDX 返回的 HTML 内容。

  • 支持通过后端读取配套 MDD 中的图片、音频、CSS、字体和其他媒体资源。

  • 词条中有音频资源时可以直接播放。

  • 支持复制纯文本释义,方便粘贴到笔记或其他工具中。

  • 支持最近搜索,保留数量可以在管理界面配置。

更舒服的输出体验

  • 查询页面同时适配桌面端和移动端。

  • 移动端提供更紧凑的词典筛选控件。

  • 移动端搜索后会直接定位到结果区域,避免最近搜索挡住结果。

  • 最佳匹配结果会被突出显示,其他匹配结果在下方继续展示。

  • 查询结果会显示公开 / 私有来源标识。

  • 支持多种主题,包括复古风格、深色主题、黑白主题等。

  • 阅读字体可以切换为 sans / serif / mono / 自定义字体。

个人偏好

  • 切换界面语言:简体中文 / English。

  • 切换视觉主题。

  • 设置阅读字体模式。

  • 上传并使用共享自定义字体。

  • 设置显示名称和头像。

  • 设置最近搜索保留数量。


词典管理功能

词典维护

  • 在网页中上传 .mdx 文件和可选的 .mdd 文件。

  • 刷新单本词典,用于重新加载或补齐资源。

  • 刷新整个词典库,用于重新扫描挂载目录。

  • 启用 / 停用词典。

  • 设置词典为公开 / 私有。

  • 删除词典。

  • 在界面中查看词典文件状态:

    • ok

    • missing_mdx

    • missing_mdd

    • missing_all

  • 查看结构化刷新报告:

    • discovered

    • updated

    • skipped

    • failed

词典文件识别规则

  • 同 basename 的 .mdx + .mdd 会被视为同一套词典。

  • 如果先上传 MDX,之后再补充同名 MDD,可以通过刷新重新发现资源。

  • 挂载的词典目录会被递归扫描。

  • 如果不挂载外部目录,也可以只使用网页上传模式。

站点级管理

管理员可以设置:

  • 是否开放新用户注册。

  • 网站 footer 额外信息。

  • 版权信息。

默认情况下,footer 信息为空时不会显示。


MCP 支持

Owl 内置基于 SSE 的 MCP 服务,方便 AI 客户端调用词典。

Endpoint

/api/mcp/sse

认证方式是每个用户自己的 MCP Token:

Authorization: Bearer <MCP_TOKEN>

临时测试也可以使用 URL 参数:

/api/mcp/sse?token=<MCP_TOKEN>

初次 SSE 连接必须携带 Token;连接建立后,SDK 后续 POST 请求会通过 MCP session 继续通信。

MCP 工具

  • list_dictionaries

    • 列出当前 token 用户可访问的词典。

    • 范围:已启用的公开词典 + 当前用户自己的私有词典。

  • search_dictionary

    • 查询当前 token 用户可访问的词典。

    • 必填:query

    • 可选:dictionary_iddictionary_name

    • 如果不指定词典,则按 Web 查询相同范围搜索全部可访问词典。

Token 管理

每个用户都可以在管理界面维护自己的 MCP Token:

  • 保存自定义 Token

  • 生成随机 Token

  • 删除 / 撤销 Token

  • 打开使用说明弹窗查看接入方式

Token 只会以 hash 形式存储。生成后请立即复制,之后界面只显示首尾提示。

Docker 部署

仓库提供两个 Docker Compose 文件:

  • docker-compose.yml:最简单部署,不启用 Redis

  • docker-compose.redis.yml:启用 Redis + RediSearch

方案一:不启用 Redis

cp .env.example .env
# 先修改 OWL_JWT_SECRET 和管理员账号密码
docker compose -f docker-compose.yml pull
docker compose -f docker-compose.yml up -d

默认地址:

http://localhost:8080

该模式会启动:

  • Owl:http://localhost:8080

  • SQLite:保存在持久化 volume owl_data

  • 上传词典:保存在 /app/data/uploads

  • 不依赖 Redis

方案二:启用 Redis + RediSearch

如果你希望启用 Redis 前缀 / 精确索引和 RediSearch 模糊查询,可以使用:

cp .env.example .env
# 先修改 OWL_JWT_SECRET 和管理员账号密码
docker compose -f docker-compose.redis.yml pull
docker compose -f docker-compose.redis.yml up -d

该模式会启动:

  • Owl:http://localhost:8080

  • Redis Stack Server,用于 Redis + RediSearch

  • SQLite 和上传文件保存在 owl_data

  • Redis 数据保存在 owl_redis

Compose 文件默认使用发布镜像:czyt/owl:latest


部署说明

挂载已有词典目录

如果你本机已经有很多 .mdx / .mdd 文件,可以把宿主机目录挂载到 OWL_LIBRARY_DIR

示例覆盖:

services:
  owl:
    environment:
      OWL_LIBRARY_DIR: /app/library
    volumes:
      - owl_data:/app/data
      - ./dicts:/app/library

docker镜像地址: ghcr.io/ca-x/owl:latest 或者 czyt/owl:latest

启动后:

  1. 登录

  2. 打开 管理

  3. 点击 刷新词典库

Owl 会递归扫描目录,并自动把 name.mdxname.mdd 识别为同一套词典。

纯网页上传模式

如果你不想挂载外部词典目录,可以保持:

OWL_LIBRARY_DIR=/app/data/uploads

这样词典就可以完全通过网页上传和管理。

首次启动检查清单

  1. 打开 http://localhost:8080

  2. 使用初始化管理员账号登录。

  3. 上传一本测试词典,或挂载词典目录后刷新词典库。

  4. 根据需要设置词典公开 / 私有。

  5. 回到首页确认可以正常查词。

  6. 可选:配置注册开关、footer、字体和 MCP Token。

升级说明

升级 Owl 时,请使用与你启动时相同的 compose 文件。

不启用 Redis:

git pull
docker compose -f docker-compose.yml down
docker compose -f docker-compose.yml pull
docker compose -f docker-compose.yml up -d

启用 Redis:

git pull
docker compose -f docker-compose.redis.yml down
docker compose -f docker-compose.redis.yml pull
docker compose -f docker-compose.redis.yml up -d

SQLite 数据、上传词典和 Redis 数据都会保留在 Docker volume 中,除非你手动删除 volume。

软件界面

哎呀,镜像地址仓库地址呢

已经编辑