Skip to main content
Glama
humbertolvarona

opencode-document-rag-mcp

MarkerとChromaDBを使用したローカルドキュメントMCPサーバー

このプロジェクトは、OpenCode用のPython MCPサーバーを実装します。DOCS/ 配下にあるPDF、Word(.docx)、PowerPoint(.pptx)、EPUBファイルを読み取り、常に DOCS/mdDB/ を除外します。ドキュメントをMarkerでMarkdownに変換し、表と数式をLaTeXとして保持し、完全なMarkdownファイルを DOCS/mdDB/ に保存し、ChromaDBに永続的なセマンティックインデックスを作成します。

検索は構造を認識します。ChromaDBはクエリに最も関連するチャンクを特定しますが、MCPサーバーは孤立したチャンクを返しません。結果のメタデータを使用して元のMarkdownファイルを開き、見出しで区切られた完全なセクションを再構築します。応答には、周囲のテキスト、表、数式に加えて、ファイルパスと行範囲が含まれます。

データフロー

flowchart TD
    A["DOCS: PDF, DOCX, PPTX, EPUB"] --> B["Marker 2"]
    B --> C["Complete Markdown + images"]
    C --> D["DOCS/mdDB"]
    C --> E["Structural chunks"]
    E --> F["Local ChromaDB"]
    G["OpenCode query"] --> F
    F --> H["Chunk metadata"]
    H --> D
    D --> I["Complete Markdown section"]
    I --> G

各チャンクは最低限、source_pathmarkdown_pathsection_titlesection_pathsection_start_linesection_end_linechunk_start_linechunk_end_line を保存します。また、変更を検出するためにソースドキュメントとMarkdownファイルのSHA-256ハッシュも保存します。

Related MCP server: Personal Semantic Search MCP

プロジェクト構造

current-project/
├── DOCS/
│   ├── article.pdf
│   ├── manual.docx
│   └── mdDB/
│       ├── article.md
│       ├── manual.md
│       └── .chroma/
├── .opencode/
│   └── MCP/
│       └── opencode-document-rag-mcp/
│           ├── src/doc_rag_mcp/
│           ├── tests/
│           ├── README.md
│           └── pyproject.toml
└── opencode.jsonc

ソースドキュメントは DOCS/ 直下または DOCS/mdDB/ 以外の任意のサブディレクトリに配置できます。相対ディレクトリ構造は出力に保持されます。たとえば、DOCS/manuals/instrument.pdfDOCS/mdDB/manuals/instrument.md を生成します。抽出された画像は instrument_assets/ のMarkdownファイルの隣に保存され、リンクは相対パスに書き換えられます。DOCS/mdDB/ ツリー全体は検出から除外されるため、MCPサーバーが自身の出力を処理することはありません。

要件

Python 3.10〜3.13と uv が必要です。Marker 2はOCRと数式に推論バックエンドが必要です。macOSまたはCPUのみのシステムでは llama.cpp が推奨されます。NVIDIA GPUを搭載したシステムでは、Suryaを通じて設定されたVLLMバックエンドを使用できます。

macOSの場合:

brew install uv llama.cpp

Linuxでは、uv とllama.cppが提供する最近の llama-server バイナリをインストールします。NVIDIAシステムでは、Markerの要件に従ってDockerとNVIDIA Container Toolkitをインストールします。

インストール

リリースアーカイブを現在のプロジェクトのルートに直接展開します。アーカイブにはすでに .opencode/MCP/opencode-document-rag-mcp/ ディレクトリ構造が含まれています:

cd /path/to/current-project
unzip opencode-document-rag-mcp-v1.1.2.zip -d .
uv sync --project .opencode/MCP/opencode-document-rag-mcp

展開後、MCPサーバーは正確に次の場所にインストールされます:

.opencode/MCP/opencode-document-rag-mcp

最初の変換と最初のベクトル化では、必要なモデルをダウンロードします。ONNX埋め込みモデルは DOCS/mdDB/.chroma/.embedding_models/ に保存されます。MarkerモデルはMarkerとSuryaによって設定されたキャッシュを使用します。初期プロセスには時間がかかり、数ギガバイトを消費する場合があります。DOCX、PPTX、EPUBドキュメントには marker-pdf[full] バリアントが必要ですが、これは pyproject.toml にすでに含まれています。

OpenCode設定

opencode.example.jsonc の設定を、プロジェクトルートの opencode.json または opencode.jsonc ファイルにコピーします。MCPサーバーが別の場所に保存されている場合は、--project に続くパスのみを変更します。

最小構成:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "document-rag": {
      "type": "local",
      "command": [
        "uv",
        "run",
        "--project",
        ".opencode/MCP/opencode-document-rag-mcp",
        "doc-rag-mcp"
      ],
      "cwd": ".",
      "enabled": true,
      "timeout": 30000,
      "environment": {
        "DOC_RAG_PROJECT_ROOT": ".",
        "SURYA_INFERENCE_BACKEND": "llamacpp",
        "SURYA_INFERENCE_KEEP_ALIVE": "true"
      }
    }
  }
}

cwd: "." 設定は、OpenCodeで開かれたプロジェクトのルートを基準にすべてのパスを解決します。接続を確認するには:

opencode mcp list

AGENTS.example.md ファイルには、ドキュメントに関する質問に答える前にこのMCPサーバーにクエリを実行するようOpenCodeに指示するオプションのポリシーが含まれています。その内容をプロジェクトの AGENTS.md ファイルに組み込むことができます。

MCPツール

ツール

機能

list_documents

DOCS/ 配下のサポート対象ファイルを一覧表示します。DOCS/mdDB/ は除外されます。

ingest_document

1つのファイルを変換してインデックス化します。force=true を設定すると変換を繰り返します。

ingest_all_documents

すべてのソースドキュメントを同期し、変更のないファイルはスキップします。

search_documents

セマンティック検索を実行し、ディスクから完全なMarkdownセクションを返します。

read_markdown_section

階層パスで特定のセクションを読み取ります。

index_status

インデックス化されたドキュメントとチャンク数を報告します。

OpenCodeでのMCPサーバーの使用

ソースドキュメントを DOCS/ に配置しますが、DOCS/mdDB/ には絶対に配置しないでください。次のようなリクエストを使用できます:

Use document-rag to list the available documents.
Use ingest_all_documents to convert and index every source document under DOCS, excluding mdDB.
Search the documents for the definition of wave energy flux, preserving the related LaTeX equations and tables.
Search only manual_tecnico.pdf for the instrument's operating limits and cite the Markdown section and line range.
Read the Methods > Statistical analysis section from article.docx.

拡張検索

search_documentsquery、1〜20の top_k 値、およびオプションの document_name を受け入れます。内部的には、同じセクションの複数のチャンクがすべての結果位置を占めないように、ChromaDBから追加の結果を要求します。次に、重複するセクションを削除し、最大 top_k 個の個別セクションを返します。

各結果には context が含まれます。これはクエリ時にディスクから読み取られた完全なセクションです。index_is_current は、Markdownファイルがインデックス化されたときと同じハッシュをまだ持っているかどうかを示します。この値が false の場合は、ingest_document または ingest_all_documents を実行します。ソースドキュメントが変更されていない場合、システムはMarkerを再度実行せずに既存のMarkdownを再インデックス化します。

変換と数式

Markerは、$$ で区切られた整形された表とLaTeX数式を出力します。デフォルトモードは balanced で、表、OCR、数学的な忠実度が優先される場合に適しています。CPUまたはApple Siliconシステムでは、処理コストを削減します:

"DOC_RAG_MARKER_MODE": "fast"

スキャンされたドキュメントや読み取れないテキストの場合:

"DOC_RAG_FORCE_OCR": "true"

Markerのオプションのハイブリッド補正を互換性のあるLLMサービスを通じて使用する場合:

"DOC_RAG_USE_LLM": "true"

最後のオプションには、資格情報とMarkerがサポートするサービスが必要です。通常のMCPサーバー操作には必要ありません。

環境変数

変数

デフォルト

説明

DOC_RAG_PROJECT_ROOT

.

現在開いているプロジェクトのルート。

DOC_RAG_SOURCE_DIR

DOCS

ソースドキュメントディレクトリ。DOCS/mdDB/ は除外されます。

DOC_RAG_MARKDOWN_DIR

DOCS/mdDB

完全なMarkdownの保存ディレクトリ。

DOC_RAG_CHROMA_DIR

DOCS/mdDB/.chroma

ローカルのChromaDB永続化ディレクトリ。

DOC_RAG_COLLECTION

document_markdown

ChromaDBのコレクション名。

DOC_RAG_CHUNK_MAX_CHARS

2400

各チャンクの目標サイズ。

DOC_RAG_MARKER_MODE

balanced

Markerの balanced または fast モード。

DOC_RAG_FORCE_OCR

false

ドキュメント全体でOCRを強制します。

DOC_RAG_USE_LLM

false

MarkerのハイブリッドLLM補正を有効にします。

セキュリティと一貫性

サーバーは、サポートされていない拡張子、.. パストラバーサル、DOCS/ 外のソース、DOCS/mdDB/ 内のソース、DOCS/mdDB/ 外のMarkdownパスを拒否します。ChromaDBに保存されたパスは、再度検証されることなく使用されることはありません。Markdownの書き込みはアトミックであり、インデックスの置き換えは対応するドキュメントに限定されます。

同じディレクトリに同じベース名の2つのファイルがある場合(manual.pdfmanual.docx など)、両方とも manual.md を生成します。サーバーはこの衝突を検出し、書き込みまたはインデックス化の前にソースファイルの1つを名前変更する必要があります。

テスト

単体テストはMarkerまたはChromaDBをロードしません。階層セグメンテーション、表と数式の保持、セクションの展開、パス保護を検証します:

PYTHONPATH=src python -m unittest discover -s tests -v

完全なソースツリーの構文を確認することもできます:

python -m compileall -q src tests

ライセンス

このプロジェクトはMITライセンスの下で配布されています。MarkerはコードにApache-2.0ライセンスを使用し、モデルの重みには別のライセンスを使用します。大規模な商用利用の前にMarkerの利用規約を確認してください。

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

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    A
    maintenance
    Privacy-first local document search using semantic search. Runs entirely on your machine with no cloud services, supporting PDF, DOCX, TXT, and Markdown files.
    9
    3,271
    371
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables semantic search over local notes and documents using natural language queries. Supports multiple file types (Markdown, Python, HTML, JSON, CSV, text) with fast local embeddings and persistent ChromaDB vector storage.
    1
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides token-efficient semantic search and document retrieval by indexing PDFs, text, and markdown files into local notebooks using ChromaDB. It enables AI agents to query relevant passages from large documents through local embedding models like Hugging Face or Ollama.
    1
    MIT

View all related MCP servers

Related MCP Connectors

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

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

  • Search a billion+ documents — papers, books, code, legal cases, forums, Wikipedia, and more.

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/humbertolvarona/opencode-document-rag-mcp'

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