Skip to main content
Glama

縉雲文采 Sovena

English | 简体中文

Zotero → Markdown 意味文献パック → ベクトル検索:各学問分野の学術研究向けローカル文献フロー処理システム(人文・社会科学・理工・医学など、影印・スキャン資料が多い分野で特に有用)。MCP(Model Context Protocol)サービスとして任意のローカル/リモート AI クライアントに公開します。

「縉雲」は北碚縉雲山——西南大学の所在地——に由来します。「文采」には二つの意味があります:文献の精髄を採撷(採り集める)こと、そして文章の華采(あや)。 「采撷遠古之花兮,以醸造吾人之蜜。」——呉宓(西南大学で二十八年教鞭を執る)

応用シーン

  • 文献レビューと執筆:Zotero 内の文献(影印古籍、スキャン版 PDF を含む)をページ番号付き Markdown に一括変換。AI クライアントが引用する際にページまで正確に遡れます

  • クロスライブラリ意味検索:数百篇の文献に対して自然言語で質問(例:「音色の音響学的測定方法には何があるか」)。1 篇ずつキーワードを探す必要はありません

  • 古籍・影印本のデジタル化:スキャン版 PDF は自動で OCR チャネルを通り、タイトル・表・二段組レイアウトを構造化テキストに復元

  • Zotero 以外の資料:電子書籍ライブラリ、バラ PDF、講義資料など任意のフォルダを、同じく検索可能な一時資料パック(adhoc)に

  • AI 深層読書の外部脳:Claude Desktop / Cherry Studio / Trae などのクライアントが MCP 経由で直接文献ライブラリを照会、回答に出典付き

  • リモート協働:サーバーを任意の実行条件を満たす PC(自宅/研究室/クラウドいずれでも)にデプロイし、他の PC は AI クライアントにサーバー URL を入力するだけで利用可能

Related MCP server: zotero-mcp-lite

コア機能

機能

説明

Zotero 深層連携

分類・項目・注釈の読み取り(ローカル API、Web API キー不要)。Zotero プラグイン(.xpi、分類・項目の右クリックで直接アクセス)付属

文献全文変換

添付ファイルを一括で AI フレンドリーな Markdown に変換、【書ページ番号】注釈付き(PDF Page Labels と OCR ページ番号の二重ソース)

スキャン・影印 OCR

Unlimited-OCR 構造化認識、MLX / GGUF(llama-server)デュアルバックエンド、全プラットフォーム対応・リモート可

ベクトル意味検索

LanceDB + 任意の OpenAI 互換 embedding サービス(ローカルまたはリモート商用プラットフォーム)

インクリメンタル処理

項目 version + 添付ファイル指紋(mtime)の二重検出、新規・変更分のみ処理

ワンクリック起動

uv run sovena 単一プロセスで Web 管理コンソール + MCP エンドポイント

非 Zotero 資料

電子書籍ライブラリ、バラ PDF、講義資料など任意のファイル・フォルダを、同じく検索可能な一時資料パック(adhoc)に

リモートデプロイ

サービスを一度起動すれば、他の PC は URL を入力するだけ(例:Tailscale でネットワーク構築)

タスクスケジューリング・リソースガード

OCR 並行=1、メモリガード、モデルのオンデマンドロード・リリース。PC をフリーズさせません

アーキテクチャ

Zotero(本地API) ─┐
                 ├─ Pipeline.prepare ─┬─ L1 文本路(pymupdf) ─┐
任意文件/文件夹 ─┘  (增量)             ├─ L2 OCR路(MLX/GGUF) ├─ 语义包(content.md+meta.json)
                                     └─ anydoc(非PDF)      ┘        │
                                                                 LanceDB 向量索引
                                                       (embedding: 本地/远程 OpenAI 兼容服务)
                                                                     │
                              ┌──────────────────────────────────────┤
                              │                                      │
                        Web 监管台(:8765)                      MCP 端点(/mcp)
                       (HTMX/原生JS)                    (本地 & Tailscale 远程 AI 客户端)
  • L1 テキスト経路:テキストレイヤー付き PDF → pymupdf で抽出。ページ番号は PDF Page Labels(書ページ番号、物理ページ順ではない)を優先

  • L2 OCR 経路:スキャン・影印 → Unlimited-OCR 構造化認識(MLX / GGUF デュアルバックエンド)。ページ番号の優先順位:OCR 認識の page_number > PDF Page Label > 物理ページ順

  • 非 PDF:docx / epub / html / txt / md / xlsx / pptx など → anydoc / trafilatura

  • 検索:任意の OpenAI 互換 embedding サービス(ローカル mlx-lm / Ollama、または百煉 / OpenRouter などのリモートプラットフォーム)+ LanceDB ローカルベクトルライブラリ

OCR エンジンとモデルデプロイ

sovena の OCR チャネルは Unlimited-OCR百度オープンソース、MIT ライセンス、モデル重みは HuggingFace baidu/Unlimited-OCR)を使用:DeepSeek-V2 MoE デコーダー + SAM/CLIP デュアルビジョンタワーの文書 OCR モデルで、複数ページのスキャン文書を全体認識し、タイトル・表・レイアウトを復元できます。

2 種類のバックエンドをサポートし、出力は同じ構造化形式のため、下流の変換は差異を意識しません:

バックエンド

実行方式

対応プラットフォーム

mlx(デフォルト)

本リポジトリ ocr_port/mlx-vlm コミュニティ MLX 実装

Apple Silicon Mac

http

OpenAI 互換インターフェース:llama-server / vLLM で GGUF 量子化版をサービス提供

任意のプラットフォーム(Windows / Linux / Intel Mac、純 CPU でも可)

バックエンド 1:MLX(Apple Silicon、デフォルト)

HuggingFace から MLX 重みをダウンロード(LoJexLLM/Unlimited-OCR-MLX):

huggingface-cli download LoJexLLM/Unlimited-OCR-MLX \
  --local-dir ~/models/Unlimited-OCR-MLX

デフォルトで sovena のデフォルトパス(~/models/Unlimited-OCR-MLX)に配置されるため、設定は一切不要です。別の場所に置く場合は .env で指定:

SOVENA_OCR_MODEL=/path/to/Unlimited-OCR-MLX

バックエンド 2:GGUF(任意の PC、GPU なしの Windows/Linux 含む)

Unlimited-OCR にはコミュニティ製 GGUF 量子化版があります(HuggingFace sahilchachra/Unlimited-OCR-GGUF。メインモデル Unlimited-OCR-Q4_K_M.gguf(約 3.2GB)+ ビジョンプロジェクター mmproj-Unlimited-OCR-F16.gguf のダウンロードが必要)。llama.cpp の llama-server でローカルサービスを起動するだけです:

# 1. 下载模型(二选一)
huggingface-cli download sahilchachra/Unlimited-OCR-GGUF \
  Unlimited-OCR-Q4_K_M.gguf mmproj-Unlimited-OCR-F16.gguf --local-dir ./ocr-models
# 国内可用 ModelScope 或镜像加速

# 2. 启动 OpenAI 兼容服务(8080 端口,任意平台;含 GPU 加速则加对应参数)
llama-server -m ocr-models/Unlimited-OCR-Q4_K_M.gguf \
  --mmproj ocr-models/mmproj-Unlimited-OCR-F16.gguf \
  --host 127.0.0.1 --port 8080

# 3. sovena 侧启用 http 后端(项目根目录 .env)
echo 'SOVENA_OCR_API=http://127.0.0.1:8080/v1' >> .env

vLLM など、この GGUF を実行できる任意の OpenAI 互換サービスも使用可能です(モデル名が異なる場合は SOVENA_OCR_MODEL_NAME=... を追加。認証がある場合は SOVENA_OCR_API_KEY=... を追加)。OCR サービスは GPU 搭載の別マシンにデプロイすることもでき、sovena はそのアドレスを入力するだけで使用できます。

ヒント:Q4 量子化は約 3GB、16GB メモリの一般的な PC で実行可能です。sovena はオンデマンドで呼び出し(ページ単位のリクエスト)、sovena プロセス内でメモリを占有しません。

Embedding サービス(検索用、必須)——任意の OpenAI 互換 /embeddings インターフェースで、どちらかを選択:

  • ローカル(推奨、無料・プライベート):mlx-lm(Apple 公式 MLX エコシステムの推論サービス、MIT):

uv tool install mlx-lm            # 或 pip install mlx-lm
huggingface-cli download Qwen/Qwen3-Embedding-4B --local-dir ~/models/Qwen3-Embedding-4B
mlx_lm.server --model ~/models/Qwen3-Embedding-4B --port 8080
# 起一个 OpenAI 兼容 /v1/embeddings 服务,即 sovena 的默认地址 http://localhost:8080/v1

Ollama / vLLM など他の OpenAI 互換ローカルソリューションも同様(アドレスが異なる場合は SOVENA_EMBED_API を設定)

  • リモート商用プラットフォーム(ローカルでモデルを実行したくない場合):阿里雲百煉 / OpenRouter / SiliconFlow など。.env に API アドレスとキーを記入するだけ:

# 示例:阿里云百炼(OpenAI 兼容端点)
SOVENA_EMBED_API=https://dashscope.aliyuncs.com/compatible-mode/v1
SOVENA_EMBED_API_KEY=sk-你的密钥
SOVENA_EMBED_MODEL=text-embedding-v4

注意:embedding サービス・モデルを変更するとベクトル次元と意味空間が変化するため、既存インデックスは再構築が必要です(sovena は次元の不一致を検出すると明確に通知します。_lancedb ディレクトリを削除して各分類を再「準備」するか、「全量再構築」にチェックを入れてください)。

クイックスタート

要件:任意の PC にデプロイ可能。コアフローは Python ≥ 3.12 のみ必要(Windows / macOS / Linux 共通)。OCR チャネルはどちらかを選択:Apple Silicon はデフォルトの MLX バックエンド(ゼロ設定)。その他のプラットフォーム(または GPU サーバーで OCR を実行したい場合)は GGUF バックエンド(前節「バックエンド 2」参照)。すべてコピー&ペーストで実行できます。

ステップ 1:uv をインストール(Python パッケージマネージャー、一度だけ)

「ターミナル」を開き(Launchpad で「ターミナル」または Terminal を検索)、貼り付け:

curl -LsSf https://astral.sh/uv/install.sh | sh

インストール後、ターミナルを閉じて開き直します(コマンドを有効にするため)。確認:uv --version でバージョンが表示されれば OK。

ステップ 2:Zotero をインストールして起動したままにする

  • zotero.org から Zotero 7+ をダウンロード・インストールし、文献をインポート

  • sovena は Zotero のローカル API 経由で読み取ります(Zotero が開いていれば自動で利用可能、設定不要)

  • 添付ファイルは「インポートした添付ファイル」または「リンク添付ファイル」の両方に対応

ステップ 3:モデルサービスを準備(検索必須 + OCR 任意)

embedding サービス(検索必須)、どちらかを選択:

  • ローカル(推奨)mlx-lm(Apple 公式 MLX エコシステム、MIT)——uv tool install mlx-lm、モデルをダウンロードして mlx_lm.server --model <モデルディレクトリ> --port 8080 でサービス起動(完全なコマンドは前節「Embedding サービス」参照)。Ollama / vLLM など他の OpenAI 互換ソリューションも同様

  • リモートプラットフォーム(ローカルでモデルを実行しない):阿里雲百煉 / OpenRouter など。プロジェクトルートに .env を作成し、アドレスとキーを記入(前節「Embedding サービス」の例参照)

OCR モデル(スキャン文書のみ必要、Apple Silicon):HuggingFace から Unlimited-OCR-MLX~/models/Unlimited-OCR-MLX にダウンロード(コマンドは前節「バックエンド 1」参照。sovena が必要時に自動でロード・リリース)

非 Apple Silicon PC で OCR を行う場合:「GGUF バックエンド」を使用——Unlimited-OCR-GGUF をダウンロード + llama-server を実行。設定は前節「バックエンド 2」参照。 すぐに体験したいだけで、検索はまだ不要?モデルサービスは後から追加できます。先にステップ 4〜5 をスキップして進めてください。

ステップ 4:sovena を取得して依存関係をインストール

git clone https://github.com/<you>/sovena.git
cd sovena
uv sync        # 自动下载全部依赖(首次约 1.3GB,需要几分钟)

非 Apple Silicon PC(Windows / Linux / Intel Mac):MLX 関連の依存関係は MLX OCR バックエンドでのみ使用され、uv sync はこれらのプラットフォームでは自動的にスキップするか CPU 互換バージョンでインストールされます。テキスト PDF、非 PDF 文書変換、検索などのコア機能、および GGUF バックエンドの OCR は正常に使用できます。

ステップ 5:ワンクリック起動

uv run sovena

Uvicorn running on http://0.0.0.0:8765 が表示されれば成功です。ブラウザで **<http://localhost:8765** を開きます:>

  • 「性能監視」ページのドットが緑 → サービス正常

  • 「Zotero 文献フロー」ドロップダウンに分類が表示される → Zotero 接続成功

終了時はターミナルで Control + C を押して停止します。サービスは常駐せず、自動起動もしません。重い操作は内部で直列スケジューリング(OCR 並行=1、メモリガード)されるため、PC をフリーズさせることはありません。

ステップ 6(任意):個人パス設定

デフォルトデータは ~/sovena_data に保存されます。別の場所(外付けハードディスクなど)に置きたい場合は、プロジェクトルートに .env ファイルを作成:

echo 'SOVENA_ROOT=/Volumes/你的盘/sovena_data' > .env

.env は git で無視されているため、個人パスを書いてもリポジトリに入りません。

ステップ 7:最初のタスクを実行

Web コンソール「Zotero 文献フロー」→ 小さな分類(例:5 件の文献)を選択 →「準備開始」→「性能監視」に切り替えて進捗を確認。完了後、「意味検索」で質問してみてください。

よくある質問

現象

解決

uv: command not found と表示

ステップ 1 の uv がインストールされていないか、ターミナルを開き直していない

ポートが使用中と表示

古いサービスが停止していない:lsof -ti tcp:8765 | xargs kill 後に再起動

「Zotero 接続失敗」

Zotero が開いていない、または旧バージョン(7.0+ が必要)

検索エラー・結果なし

embedding サービスが起動していない・キーが間違っている(ローカル mlx-lm またはリモートプラットフォーム)、またはその分類がまだ「準備」されていない。embedding モデルを変更した場合はインデックス再構築が必要

OCR モデルエラー

MLX バックエンド:Unlimited-OCR-MLX をダウンロードしていない・パスが間違っている。http バックエンド:llama-server が起動していない・SOVENA_OCR_API が間違っている(前節参照)

マシンのファンが全開

正常:OCR タスクが重いため。タスク終了後、モデルは自動的にアンロードされます

ステップ 8(任意):AI クライアント接続(他の PC でも同様に適用)

MCP streamable-http をサポートする任意のクライアント(Claude Desktop、Cherry Studio、Trae など)に以下を入力:

{
  "mcpServers": {
    "sovena": { "url": "http://localhost:8765/mcp" }
  }
}

リモート(他の PC)デプロイ:サーバー側は SOVENA_HOST=0.0.0.0 で起動(デフォルト)。クライアントは URL を http://<サーバーIPまたはTailscaleホスト名>:8765/mcp に変更するだけです。Web 管理コンソールの「設定」ページで現在のデプロイ設定 JSON をワンクリックコピー・ダウンロードできます。

Zotero プラグイン(任意)

dist/sovena-plugin-<version>.xpiZotero 7+(9/10 含む) にインストール可能なクライアントプラグインで、Zotero 内から sovena に直接アクセスできます:

  • 分類右クリック → 「sovena:意味パックを準備・更新(インクリメンタル)」

  • 項目右クリック → 「sovena:添付ファイルを一時意味パックに追加」(選択した項目のローカルファイル添付が adhoc フローで処理)

  • ツールメニュー sovena → 管理コンソールを開く / サーバーアドレス設定 / MCP クライアント設定をコピー / 接続チェック

インストール:Zotero → ツール → プラグイン → 右上の歯車 → Install Plugin From File… → dist/sovena-plugin-0.1.0.xpi を選択。デフォルトでは http://localhost:8765 に接続。他の PC では「ツール → sovena → サーバーアドレス…」に sovena サーバーのアドレスを入力します。

プラグインの再パッケージ(zotero-plugin/ を変更後):

bash zotero-plugin/build.sh    # 产出 dist/sovena-plugin-<version>.xpi

環境変数

すべての設定は環境変数で設定可能。推奨:プロジェクトルートに .env ファイルを作成(.gitignore で無視されるため、個人パスの記入に適しています)。サービス起動時に自動ロードされます:

SOVENA_ROOT=/Volumes/your-disk/zotero_AI
SOVENA_ZOTERO_API=http://localhost:23119/api

変数

デフォルト値

説明

SOVENA_ROOT

~/sovena_data

意味文献パックのルートディレクトリ(個人デプロイでは .env に設定することを推奨。LanceDB もデフォルトでこれに従う)

SOVENA_ZOTERO_API

http://localhost:23119/api

Zotero ローカル API

SOVENA_HOST

0.0.0.0

サービス待受アドレス

SOVENA_PORT

8765

サービスポート

SOVENA_EMBED_API

http://localhost:8080/v1

embedding サービスアドレス(ローカル mlx-lm/Ollama またはリモートプラットフォーム)

SOVENA_EMBED_API_KEY

(空)

embedding サービスキー(リモート商用プラットフォームでは必須)

SOVENA_EMBED_MODEL

text-embedding-qwen3-embedding-4b

embedding モデル名

SOVENA_LANCEDB

$SOVENA_ROOT/_lancedb

ベクトルライブラリディレクトリ

SOVENA_OCR_BACKEND

auto

OCR バックエンド:mlx / http / autoSOVENA_OCR_API を設定すると自動で http)

SOVENA_OCR_MODEL

~/models/Unlimited-OCR-MLX

MLX バックエンドのモデルディレクトリ

SOVENA_OCR_API

(空)

http バックエンドのサービスアドレス(例:http://127.0.0.1:8080/v1

SOVENA_OCR_MODEL_NAME

Unlimited-OCR

http バックエンドのモデル名

SOVENA_OCR_API_KEY

(空)

http バックエンドの認証キー(あれば)

SOVENA_MEM_GUARD_MB

12288

メモリガードしきい値(MB)。これを下回ると新規タスクを延期

使用方法

Zotero 文献フロー(インクリメンタル)

Web コンソールで分類を選択 →「準備開始」;または AI クライアントから MCP ツール sovena_prepare を呼び出し。繰り返し実行で自動インクリメンタル:新規・変更項目のみ処理(Zotero version の変化または添付ファイル mtime の変化)。インデックスは項目単位で追加・削除。「全量再構築」にチェックを入れると強制的にやり直せます。

adhoc 一時資料(任意のファイル・フォルダ)

電子書籍ライブラリ、バラ PDF、講義資料などを検索可能な意味パックに:

  • Web コンソール:「一時資料パック」カードにパスを入力(複数は改行または ; 区切り)→ 送信。以降、Zotero 分類と一緒に意味検索可能

  • MCPsovena_adhoc_process(paths=["/path/to/E_book/某子目录"], name="我的书库")

  • RESTPOST /api/adhoc/submit {"paths": [...], "name": "..."}

pdf/epub/docx/html/txt/md/xlsx/pptx などに対応。スキャン版 PDF は自動で OCR 処理。インクリメンタルにも対応(ソースファイルの mtime が変わらなければスキップ)。

MCP ツール一覧

分類

ツール

Zotero 読み取り

zotero_collections zotero_search zotero_item zotero_annotations

文献フロー

sovena_prepare sovena_manifest sovena_read_item sovena_search sovena_find_similar

adhoc

sovena_adhoc_process sovena_adhoc_list

タスク・運用

sovena_job_status sovena_jobs sovena_cancel_job sovena_system_status sovena_doctor

注:Zotero ローカル API は読み取り専用のため、書き込み操作ツールは提供しません。

意味パックのディレクトリ構造

$SOVENA_ROOT/
  <分类名>/
    _manifest.json                 # 分类级清单(增量依据)
    <作者>_<年份>_<标题>/
      meta.json                    # Zotero 元数据 + 转换统计
      content.md                   # AI 友好 markdown(含【书页页码】标注)
  adhoc/
    <资料包名>/
      _manifest.json
      <文件名slug>/
        meta.json
        content.md
  _lancedb/                        # 向量库

REST API 概要

方法

路径

説明

GET

/api/collections

Zotero 分類 + adhoc パッケージと準備状態

GET

/api/config/api/system

実行設定、システム状態(メモリ/CPU/ディスク/タスク)

GET

/api/fs/list?path=

サーバー側ディレクトリ一覧(Web パスセレクター用)

POST

/api/jobs

prepare タスクを送信(collection/limit/use_ocr/rebuild)

POST

/api/adhoc/submit

adhoc タスクを送信(paths/name/use_ocr/recursive)

GET

/api/jobs[/{id}]

タスク一覧/詳細(ログ含む)、POST /{id}/cancel でキャンセル

GET

/api/search?q=

セマンティック検索(collection を限定可能)

GET

/api/manifest/{collection}/api/adhoc/manifest/{name}

マニフェスト

GET

/api/item/{collection}/{dir}/content

内容/メタデータ

GET

/api/system/api/mcp-config

システム状態、MCP クライアント設定

プロジェクト構造

sovena/
  main.py                  # 一键启动入口
  sovena/
    server.py              # 服务总入口(Web + MCP 同进程,自动加载 .env)
    web.py / webui.html    # Web 监管台(分区 Tab + 路径选择器)
    mcp_server.py          # MCP 工具集
    zotero_collector.py    # Zotero 本地 API 采集(附件 4 路解析)
    pipeline.py            # prepare 流水线(增量)
    adhoc.py               # 任意资料临时处理
    converter.py           # L1/L2/anydoc 转换
    indexer.py             # 分块 + 向量化 + LanceDB
    packager.py            # 语义包落盘
    jobs.py                # 任务调度(内存守卫/OCR 并发=1)
  zotero-plugin/           # Zotero 客户端插件源码(bootstrap 结构)
  dist/                    # 构建产物(sovena-plugin-<version>.xpi)
  ocr_port/                # Unlimited-OCR-MLX(MLX OCR 引擎)
  .env                     # 本地个人配置(可选,不入库)

謝辞

sovena は以下のプロジェクトの上に成り立っています。深く感謝いたします:

  • Unlimited-OCR(百度,MIT)— ドキュメント OCR モデル本体;ocr_port/ コードは mlx-vlm コミュニティの MLX 実装から移植;MLX 重み(LoJexLLM 整理形式)と GGUF 量子化版(sahilchachra)は HuggingFace コミュニティから;http バックエンドは llama.cpp(MIT)の llama-server で実行

  • cookjohn/zotero-mcp — プロジェクトのインスピレーション源の一つ

  • Zotero(AGPL)— 文献管理本体とローカル API

  • PyMuPDF(AGPL)— PDF テキスト抽出とページ番号ラベル

  • LanceDB(Apache-2.0)— ローカルベクトルデータベース

  • FastMCP(MIT)— MCP サービスフレームワーク

  • anydoc(firecrawl-anydoc)— docx/epub などの非 PDF ドキュメント変換

  • trafilatura(Apache-2.0)— ウェブページ本文抽出

  • mlx-lm(Apple ml-explore,MIT)— ローカル embedding 推論サービス(mlx_lm.server、OpenAI 互換 API)

  • uv(Astral,MIT)— Python パッケージ管理

ライセンス

MIT © Sovena contributors、西南大学・芸術人類学研究所、西南大学・中国音楽心理健康研究所;著者:石丰恺(sfklc@hotmail.com

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.

  • Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.

  • Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sfk8815-create/sovena'

If you have feedback or need assistance with the MCP directory API, please join our Discord server