docdex
Docdex
リポジトリを、人間とAIが信頼できる高速かつプライベートなコンテキストに変えましょう。
Docdexは、ドキュメントとソースコードのためのローカルファーストなインデクサー兼検索デーモンです。生のファイルとAIアシスタントの間に位置し、コードをクラウドのベクトルストアにアップロードすることなく、決定論的な検索、コードインテリジェンス、永続的なメモリを提供します。
⚡ なぜDocdexなのか?
ほとんどのAIツールは「grep」(高速だが単純)やホスト型RAG(低速でアップロードが必要)に依存しています。Docdexはローカルで実行され、コード構造を理解し、AIエージェントに永続的なメモリを提供します。
問題 | 一般的なアプローチ | Docdexの解決策 |
コンテキストの検索 |
| 意図に基づいたランク付けされた構造化結果。 |
コードのプライバシー | ホスト型RAG (コードのアップロードが必要) | ローカルのみのインデックス作成。 コードはマシン内に留まります。 |
検索のサイロ化 | IDE専用の検索バー | CLI、HTTP、MCPクライアントに同時に対応する共有デーモン。 |
コードの認識 | 文字列一致 | 依存関係と定義を理解するためのASTおよびインパクトグラフ。 |
Related MCP server: mcp-server-tree-sitter
🚀 機能
📚 ドキュメントインデックス作成: リポジトリのドキュメントを即座にランク付けし、要約します。
🧠 ASTおよびインパクトグラフ: 関数の意図で検索し、下流の依存関係を追跡します(Rust、Python、JS/TS、Go、Java、C++などをサポート)。
💾 リポジトリメモリ: プロジェクトの事実、決定事項、メモをローカルに保存します。
👤 エージェントメモリ: リポジトリをまたいでユーザーの好み(例:「簡潔な箇条書きを使う」)を記憶します。
🗂️ 会話メモリ: トランスクリプトをインポートし、ウェイクアップバンドルをコンパクトに保ち、リポジトリスコープの要約、日記エントリ、ワーキングメモリを導き出します。
🕸️ 時間的ナレッジグラフ: アーカイブされた会話からエンティティ、エッジ、エピソード、コード関連のリンクを抽出し、タイムラインや近傍クエリに対応します。
🧭 ウェイクアップ + プロジェクトマップコンテキスト: コンパクトなウェイクアップバンドル、プロファイルの真実、キャッシュされた
Project map:コンテキストをOpenAI互換のチャット補完に注入します。🔌 MCPネイティブ: Claude Desktop、Cursor、Windsurfなどのツール向けに自動設定されます。
🌐 Webエンリッチメント: ローカルLLM(Ollama経由)によるフィルタリングを備えたオプションのWeb検索。
📦 インストールと設定
一度インストールしてエージェントをDocdexに向ければ、バックグラウンドで動作し続けます。
1. npm経由でインストール(推奨)
Node.js >= 18が必要です。OS(macOS、Linux、Windows)に適したバイナリがダウンロードされます。
npm i -g docdex
Windowsの要件: DocdexはMSVCランタイムを使用します。docdex/docdexdを実行する前に、Microsoft Visual C++ Redistributable 2015-2022 (x64) をインストールしてください。
Winget:
winget install --id Microsoft.VCRedist.2015+.x64手動: Microsoftから
vc_redist.x64.exeをダウンロード: https://aka.ms/vs/17/release/vc\\\\_redist.x64.exedocdexdが0xC0000135で終了する場合、ランタイムが不足しています。
2. 自動設定
以下のクライアントがインストールされている場合、DocdexはローカルのMCPエンドポイント(デーモンHTTP/SSE)を使用するように自動的に設定します:
Claude Desktop, Cursor, Windsurf, Cline, Roo Code, Continue, VS Code, PearAI, Void, Zed, Codex.
注: インストール後、AIクライアントを再起動してください。
🛠️ 使用ワークフロー
1. リポジトリのインデックス作成
一度実行して、インデックスとグラフデータを構築します。
docdexd index --repo /path/to/my-project
2. デーモンの起動
共有サーバーを起動します。これにより、HTTPリクエストとMCP接続が処理されます。
docdex start
# or: docdexd daemon --host 127.0.0.1 --port 28491
3. 質問する(CLI)
ターミナルから直接チャットできます。
docdexd chat --repo /path/to/my-project --query "how does auth work?"
🔌 Model Context Protocol (MCP)
DocdexはAIエージェントの「脳」となるように設計されています。エージェントが接続するためのMCPエンドポイントを公開します。
アーキテクチャ
flowchart LR
Repo[Repo on disk] --> Indexer[Docdex Indexer]
Indexer --> Daemon[Docdex Daemon]
Daemon -->|HTTP + SSE| MCPClient[MCP Client]
MCPClient --> Host[AI Agent / Editor]
デーモンのHTTP/SSEエンドポイントを使用してください。サンドボックス化されたクライアントの場合、DocdexはローカルIPC(UnixソケットまたはWindows名前付きパイプ)経由でMCPを提供することもできますが、ほとんどのMCPクライアントではHTTP/SSEがデフォルトのままです。
手動設定
クライアントを手動で設定する必要がある場合:
JSON (Claude/Cursor/Continue):
{
"mcpServers": {
"docdex": {
"url": "http://127.0.0.1:28491/v1/mcp/sse"
}
}
}
Claude Code (CLI) JSON (~/.claude.json またはプロジェクトの .mcp.json):
{
"mcpServers": {
"docdex": {
"type": "http",
"url": "http://127.0.0.1:28491/v1/mcp"
}
}
}
TOML (Codex):
[mcp_servers.docdex]
url = "http://127.0.0.1:28491/v1/mcp"
tool_timeout_sec = 300
startup_timeout_sec = 300
🤖 機能と例
1. ASTおよびインパクト分析
単に「addressGenerator」という文字列を見つけるだけでなく、その定義とそれが何に影響を与えるかを見つけます。
# Find definition
curl "http://127.0.0.1:28491/v1/ast?name=addressGenerator&pathPrefix=src"
# Track downstream impact (what breaks if I change this?)
curl "http://127.0.0.1:28491/v1/graph/impact?file=src/app.ts&maxDepth=3"
2. メモリシステム
Docdexでは、後で検索して思い出すのに役立つ「事実」を保存できます。
リポジトリメモリ (プロジェクト固有):
# Teach the repo a fact
docdexd memory-store --repo . --text "Payments retry up to 3 times with backoff."
# Recall it later
docdexd memory-recall --repo . --query "payments retry policy"
エージェントメモリ (ユーザーの好み):
# Set a style preference
docdexd profile add --agent-id "default" --category style --content "Use concise bullet points."
3. 会話メモリ
会話メモリはデフォルトでリポジトリスコープであり、オプションです。リポジトリを持たないセッションでは、リポジトリアーカイブを誤って再利用しないよう、明示的な会話名前空間を使用する必要があります。サブシステムはトランスクリプトをインポートし、エピソードの要約とワーキングメモリを保存し、日記エントリと時間的KGの事実を knowledge.db に導き出し、リコールを厳格なウェイクアップ予算内に保ちます。
CLIのアーカイブ、日記、フックコマンドはHTTPベースのラッパーであるため、最初に docdex start または docdexd daemon を実行してください。
# Archive and inspect transcripts
docdexd conversations import --repo . ./session.txt --format plain_text --agent-id codex
docdexd conversations list --repo . --agent-id codex
docdexd conversations search --repo . "timeline_index"
docdexd conversations read --repo . <session_id>
# Import into an explicit global conversation namespace instead of a repo archive
docdexd conversations import --conversation-namespace shared-team ./session.txt --format plain_text --agent-id codex
docdexd conversations search --conversation-namespace shared-team "timeline_index"
# Keep agent diary notes alongside imported sessions
docdexd diary write --repo . --agent-id codex "Wake-up rollout validated against knowledge.db timeline output."
docdexd diary read --repo . --agent-id codex
# Trigger durable summarization from an external transcript
docdexd hook conversation --repo . \
--action session_close_summarization \
--source codex \
--agent-id codex \
--transcript ./session.txt \
--format plain_text \
--wait-for-processing
# Build a compact wake-up bundle over recent context
curl -X POST http://127.0.0.1:28491/v1/wakeup \
-H "Content-Type: application/json" \
-d '{"agent_id":"codex","query":"timeline_index","max_tokens":96}'
# Address the same archive over HTTP without repo_id
curl -X POST http://127.0.0.1:28491/v1/wakeup \
-H "Content-Type: application/json" \
-H "x-docdex-conversation-namespace: shared-team" \
-d '{"agent_id":"codex","query":"timeline_index","max_tokens":96}'
# Explore derived repo-scoped knowledge facts and provenance
curl "http://127.0.0.1:28491/v1/kg/query?q=knowledge.db&limit=10"
curl "http://127.0.0.1:28491/v1/kg/search/nodes?q=knowledge&limit=10"
curl "http://127.0.0.1:28491/v1/kg/neighborhood?entity=knowledge.db&limit=10"
curl "http://127.0.0.1:28491/v1/kg/timeline?entity=knowledge.db&limit=10"
# Chat with wake-up + project-map context and inspect reasoning trace metadata
curl -X POST http://127.0.0.1:28491/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "fake-model",
"messages": [{"role": "user", "content": "What changed around knowledge.db?"}],
"docdex": {
"agent_id": "codex",
"limit": 6,
"include_libs": true,
"dag_session_id": "session-123"
}
}'4. ローカルLLM (Ollama)
Docdexは埋め込みとオプションのローカルチャットにOllamaを使用します。
セットアップ:
docdex setupを実行して対話型ウィザードを使用します。手動: Ollamaで
nomic-embed-textがプルされていることを確認してください (ollama pull nomic-embed-text)。カスタムURL:
DOCDEX_OLLAMA_BASE_URL=http://127.0.0.1:11434 docdex start --host 127.0.0.1 --port 28491
⚙️ 設定とHTTP API
Docdexはローカルデーモンとして実行され、以下を提供します:
CLIコマンド:
docdexd chatHTTP API:
/search,/v1/capabilities,/v1/search/rerank,/v1/search/batch,/v1/chat/completions,/v1/ast,/v1/graph/impact,/v1/conversations/*,/v1/diary/*,/v1/hooks/conversation,/v1/wakeup,/v1/kg/*MCPエンドポイント:
/v1/mcpおよび/v1/mcp/sse機能ネゴシエーションツール:
docdex_capabilities,docdex_rerank,docdex_batch_search,docdex_conversation_*,docdex_diary_*,docdex_conversation_hook,docdex_wakeup,docdex_kg_*
マルチリポジトリ設定
単一のデーモンを実行し、必要に応じて追加のリポジトリをマウントします。
docdex start --port 28491
# Mount repos and capture repo_id values
curl -X POST "http://127.0.0.1:28491/v1/initialize" \
-H "Content-Type: application/json" \
-d '{"rootUri":"file:///path/to/repo-a"}'
curl -X POST "http://127.0.0.1:28491/v1/initialize" \
-H "Content-Type: application/json" \
-d '{"rootUri":"file:///path/to/repo-b"}'注意:
複数のリポジトリがマウントされている場合(またはデーモンがデフォルトのリポジトリなしで起動した場合)、HTTPリクエストに
x-docdex-repo-id: <sha256>を含めてください。MCPセッションは
initialize.rootUriで提供されたリポジトリにバインドされ、そのリポジトリを自動的に再利用します。
セキュリティ
セキュアモード: デフォルトでは、Docdexはループバック以外のバインドでTLSを強制します。
ループバック:
127.0.0.1はローカルエージェント向けにTLSなしでアクセス可能です。ネットワークに公開する場合(注意して使用してください)、
--exposeおよび--auth-tokenを使用してください。
📚 詳細はこちら
詳細な使用方法:
docs/usage.mdAPIリファレンス:
docs/http_api.mdMCP仕様:
docs/mcp/errors.md
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/bekirdag/docdex'
If you have feedback or need assistance with the MCP directory API, please join our Discord server