@ssmeo/mcp-local-rag 0.18.14 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/README.de.md +248 -215
  2. package/README.es.md +241 -215
  3. package/README.fr.md +249 -215
  4. package/README.md +207 -297
  5. package/README.pt-BR.md +236 -215
  6. package/README.zh-CN.md +133 -206
  7. package/dist/chunker/semantic-chunker.d.ts +23 -5
  8. package/dist/chunker/semantic-chunker.d.ts.map +1 -1
  9. package/dist/chunker/semantic-chunker.js +13 -5
  10. package/dist/chunker/semantic-chunker.js.map +1 -1
  11. package/dist/cli/common.d.ts +7 -0
  12. package/dist/cli/common.d.ts.map +1 -1
  13. package/dist/cli/common.js +26 -2
  14. package/dist/cli/common.js.map +1 -1
  15. package/dist/cli/delete.d.ts.map +1 -1
  16. package/dist/cli/delete.js +2 -0
  17. package/dist/cli/delete.js.map +1 -1
  18. package/dist/cli/file-collection.d.ts +2 -1
  19. package/dist/cli/file-collection.d.ts.map +1 -1
  20. package/dist/cli/file-collection.js +2 -2
  21. package/dist/cli/file-collection.js.map +1 -1
  22. package/dist/cli/ingest.d.ts +1 -0
  23. package/dist/cli/ingest.d.ts.map +1 -1
  24. package/dist/cli/ingest.js +45 -25
  25. package/dist/cli/ingest.js.map +1 -1
  26. package/dist/cli/list.d.ts.map +1 -1
  27. package/dist/cli/list.js +9 -13
  28. package/dist/cli/list.js.map +1 -1
  29. package/dist/cli/options.d.ts +8 -0
  30. package/dist/cli/options.d.ts.map +1 -1
  31. package/dist/cli/options.js +21 -0
  32. package/dist/cli/options.js.map +1 -1
  33. package/dist/cli/query.d.ts.map +1 -1
  34. package/dist/cli/query.js +2 -1
  35. package/dist/cli/query.js.map +1 -1
  36. package/dist/cli/read-neighbors.d.ts.map +1 -1
  37. package/dist/cli/read-neighbors.js +1 -0
  38. package/dist/cli/read-neighbors.js.map +1 -1
  39. package/dist/cli/relocate.d.ts +3 -0
  40. package/dist/cli/relocate.d.ts.map +1 -0
  41. package/dist/cli/relocate.js +135 -0
  42. package/dist/cli/relocate.js.map +1 -0
  43. package/dist/cli/sync.d.ts.map +1 -1
  44. package/dist/cli/sync.js +17 -8
  45. package/dist/cli/sync.js.map +1 -1
  46. package/dist/cli-main.d.ts +1 -1
  47. package/dist/cli-main.d.ts.map +1 -1
  48. package/dist/cli-main.js +5 -0
  49. package/dist/cli-main.js.map +1 -1
  50. package/dist/embedder/embedding-snapshot.d.ts +52 -0
  51. package/dist/embedder/embedding-snapshot.d.ts.map +1 -0
  52. package/dist/embedder/embedding-snapshot.js +413 -0
  53. package/dist/embedder/embedding-snapshot.js.map +1 -0
  54. package/dist/embedder/index.d.ts +36 -5
  55. package/dist/embedder/index.d.ts.map +1 -1
  56. package/dist/embedder/index.js +346 -23
  57. package/dist/embedder/index.js.map +1 -1
  58. package/dist/embedder/remote.d.ts +16 -2
  59. package/dist/embedder/remote.d.ts.map +1 -1
  60. package/dist/embedder/remote.js +48 -11
  61. package/dist/embedder/remote.js.map +1 -1
  62. package/dist/embedder/sentence-transformers-config.d.ts +24 -0
  63. package/dist/embedder/sentence-transformers-config.d.ts.map +1 -0
  64. package/dist/embedder/sentence-transformers-config.js +93 -0
  65. package/dist/embedder/sentence-transformers-config.js.map +1 -0
  66. package/dist/features/sync.d.ts +7 -0
  67. package/dist/features/sync.d.ts.map +1 -1
  68. package/dist/features/sync.js +2 -1
  69. package/dist/features/sync.js.map +1 -1
  70. package/dist/ingest/compute.d.ts +15 -7
  71. package/dist/ingest/compute.d.ts.map +1 -1
  72. package/dist/ingest/compute.js +74 -14
  73. package/dist/ingest/compute.js.map +1 -1
  74. package/dist/ingest/file.d.ts +3 -3
  75. package/dist/ingest/file.d.ts.map +1 -1
  76. package/dist/ingest/file.js +0 -5
  77. package/dist/ingest/file.js.map +1 -1
  78. package/dist/ingest/visual.d.ts +6 -2
  79. package/dist/ingest/visual.d.ts.map +1 -1
  80. package/dist/ingest/visual.js +20 -4
  81. package/dist/ingest/visual.js.map +1 -1
  82. package/dist/parser/docx-parser.d.ts +2 -0
  83. package/dist/parser/docx-parser.d.ts.map +1 -1
  84. package/dist/parser/docx-parser.js +12 -3
  85. package/dist/parser/docx-parser.js.map +1 -1
  86. package/dist/parser/index.d.ts +11 -1
  87. package/dist/parser/index.d.ts.map +1 -1
  88. package/dist/parser/index.js +27 -11
  89. package/dist/parser/index.js.map +1 -1
  90. package/dist/parser/pdf-extract.d.ts +2 -0
  91. package/dist/parser/pdf-extract.d.ts.map +1 -1
  92. package/dist/parser/pdf-extract.js +3 -0
  93. package/dist/parser/pdf-extract.js.map +1 -1
  94. package/dist/parser/pdf-filter.d.ts +2 -9
  95. package/dist/parser/pdf-filter.d.ts.map +1 -1
  96. package/dist/parser/pdf-filter.js +110 -144
  97. package/dist/parser/pdf-filter.js.map +1 -1
  98. package/dist/parser/pdf-headings.d.ts +6 -0
  99. package/dist/parser/pdf-headings.d.ts.map +1 -0
  100. package/dist/parser/pdf-headings.js +166 -0
  101. package/dist/parser/pdf-headings.js.map +1 -0
  102. package/dist/parser/text-source-map.d.ts +3 -0
  103. package/dist/parser/text-source-map.d.ts.map +1 -0
  104. package/dist/parser/text-source-map.js +33 -0
  105. package/dist/parser/text-source-map.js.map +1 -0
  106. package/dist/pdf-visual/detector.js +3 -3
  107. package/dist/pdf-visual/detector.js.map +1 -1
  108. package/dist/rerank/command.d.ts +10 -7
  109. package/dist/rerank/command.d.ts.map +1 -1
  110. package/dist/rerank/command.js +51 -10
  111. package/dist/rerank/command.js.map +1 -1
  112. package/dist/rerank/index.d.ts +3 -3
  113. package/dist/rerank/index.d.ts.map +1 -1
  114. package/dist/rerank/index.js +3 -3
  115. package/dist/rerank/index.js.map +1 -1
  116. package/dist/server/index.d.ts +5 -1
  117. package/dist/server/index.d.ts.map +1 -1
  118. package/dist/server/index.js +168 -95
  119. package/dist/server/index.js.map +1 -1
  120. package/dist/server/list-scanner.d.ts +2 -1
  121. package/dist/server/list-scanner.d.ts.map +1 -1
  122. package/dist/server/list-scanner.js +2 -2
  123. package/dist/server/list-scanner.js.map +1 -1
  124. package/dist/server/tool-definitions.js +2 -2
  125. package/dist/server/tool-definitions.js.map +1 -1
  126. package/dist/server/types.d.ts +9 -0
  127. package/dist/server/types.d.ts.map +1 -1
  128. package/dist/server-main.d.ts +2 -2
  129. package/dist/server-main.d.ts.map +1 -1
  130. package/dist/server-main.js +22 -20
  131. package/dist/server-main.js.map +1 -1
  132. package/dist/utils/base-dirs.d.ts +9 -10
  133. package/dist/utils/base-dirs.d.ts.map +1 -1
  134. package/dist/utils/base-dirs.js +28 -30
  135. package/dist/utils/base-dirs.js.map +1 -1
  136. package/dist/utils/scan.d.ts +25 -5
  137. package/dist/utils/scan.d.ts.map +1 -1
  138. package/dist/utils/scan.js +40 -10
  139. package/dist/utils/scan.js.map +1 -1
  140. package/dist/utils/source-context.d.ts +29 -0
  141. package/dist/utils/source-context.d.ts.map +1 -0
  142. package/dist/utils/source-context.js +86 -0
  143. package/dist/utils/source-context.js.map +1 -0
  144. package/dist/utils/sync-lock.d.ts +8 -0
  145. package/dist/utils/sync-lock.d.ts.map +1 -1
  146. package/dist/utils/sync-lock.js +41 -9
  147. package/dist/utils/sync-lock.js.map +1 -1
  148. package/dist/utils/sync-path-key.d.ts +1 -1
  149. package/dist/utils/sync-path-key.d.ts.map +1 -1
  150. package/dist/utils/sync-path-key.js +1 -1
  151. package/dist/utils/sync-path-key.js.map +1 -1
  152. package/dist/vectordb/index.d.ts +4 -2
  153. package/dist/vectordb/index.d.ts.map +1 -1
  154. package/dist/vectordb/index.js +30 -7
  155. package/dist/vectordb/index.js.map +1 -1
  156. package/dist/vectordb/relocate.d.ts +18 -0
  157. package/dist/vectordb/relocate.d.ts.map +1 -0
  158. package/dist/vectordb/relocate.js +179 -0
  159. package/dist/vectordb/relocate.js.map +1 -0
  160. package/dist/vectordb/types.d.ts +10 -23
  161. package/dist/vectordb/types.d.ts.map +1 -1
  162. package/dist/vectordb/types.js +14 -23
  163. package/dist/vectordb/types.js.map +1 -1
  164. package/package.json +14 -14
package/README.de.md CHANGED
@@ -4,10 +4,14 @@
4
4
 
5
5
  # MCP Local RAG
6
6
 
7
- [![GitHub stars](https://img.shields.io/github/stars/shinpr/mcp-local-rag?style=social)](https://github.com/shinpr/mcp-local-rag)
8
- [![npm version](https://img.shields.io/npm/v/mcp-local-rag.svg)](https://www.npmjs.com/package/mcp-local-rag)
9
- [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
10
- [![MCP Registry](https://img.shields.io/badge/MCP-Registry-green.svg)](https://registry.modelcontextprotocol.io/)
7
+ [![GitHub
8
+ stars](https://img.shields.io/github/stars/shinpr/mcp-local-rag?style=social)](https://github.com/shinpr/mcp-local-rag)
9
+ [![npm
10
+ version](https://img.shields.io/npm/v/mcp-local-rag.svg)](https://www.npmjs.com/package/mcp-local-rag)
11
+ [![License:
12
+ MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
13
+ [![MCP
14
+ Registry](https://img.shields.io/badge/MCP-Registry-green.svg)](https://registry.modelcontextprotocol.io/)
11
15
 
12
16
  <p align="center">
13
17
  <a href="README.md">English</a> |
@@ -18,41 +22,53 @@
18
22
  <a href="README.fr.md">Français</a>
19
23
  </p>
20
24
 
21
- Durchsuche vertrauliche Dokumente über einen MCP-Client oder das Terminal, ohne sie an eine Embedding-API zu senden.
25
+ Durchsuche vertrauliche Dokumente über einen MCP-Client oder das Terminal, ohne sie an eine
26
+ Embedding-API zu senden.
22
27
 
23
- mcp-local-rag indexiert PDF-, DOCX-, Markdown- und Textdateien direkt auf deinem Rechner. Die Suche verbindet semantische Ähnlichkeit mit Stichwortsuche. Dadurch findet sie sowohl sinngleiche Inhalte als auch exakte technische Begriffe wie API-Namen, Klassennamen und Fehlercodes.
28
+ mcp-local-rag indexiert PDF-, DOCX-, Markdown- und Textdateien direkt auf deinem Rechner. Die
29
+ Suche verbindet semantische Ähnlichkeit mit Stichwortsuche. Dadurch findet sie sowohl
30
+ inhaltlich verwandte Inhalte als auch exakte technische Begriffe wie API-Namen, Klassennamen
31
+ und Fehlercodes. Die Treffer enthalten Textstellen aus der Quelle und, sofern verfügbar,
32
+ Überschriften, Zeilen- oder Seitenzahlen. So kannst du im Original nachlesen und die Fundstelle
33
+ zitieren.
24
34
 
25
- ## Funktionen
26
-
27
- - **Läuft lokal:** Dokument-Parsing, Embeddings, Speicherung und Suche finden auf deinem Rechner statt. Nach dem ersten Modelldownload funktionieren Textimport und Suche offline.
28
- - **Hybride Suche:** Die semantische Suche findet verwandte Konzepte, während die Stichwortsuche exakte Fachbegriffe höher gewichtet.
29
- - **Konfigurierbare Embeddings:** Wähle ein Hugging-Face-Embedding-Modell, das zur Sprache und zum Fachgebiet deiner Dokumente passt.
30
- - **Semantische Aufteilung:** Dokumente werden an Themenwechseln statt nach einer festen Zeichenzahl geteilt. Markdown-Codeblöcke bleiben erhalten.
31
- - **MCP und CLI:** KI-Programmierwerkzeuge und Terminal greifen auf denselben Index zu.
32
-
33
- Es werden weder API-Schlüssel noch Docker, Python oder eine externe Datenbank benötigt.
35
+ Es werden weder API-Schlüssel noch Docker, Python oder eine externe Datenbank benötigt. Nach
36
+ dem ersten Modelldownload funktionieren Textimport und Suche offline.
34
37
 
35
38
  ## Schnellstart
36
39
 
37
40
  ### Voraussetzungen
38
41
 
39
- - Node.js 22 oder neuer
42
+ - Node.js 22.20 oder neuer
40
43
  - Internetzugang beim ersten Start, um das npm-Paket und das Embedding-Modell herunterzuladen
41
44
  - Ein Verzeichnis mit den zu durchsuchenden Dokumenten
42
45
 
43
- Setze `BASE_DIR` auf dieses Verzeichnis. Es bildet zugleich die Sicherheitsgrenze für Dateizugriffe. Ersetze `/absolute/path/to/your/documents` in den folgenden Beispielen durch den absoluten Pfad zu deinen Dokumenten.
46
+ Setze `BASE_DIR` auf dieses Verzeichnis. Es bildet zugleich die Sicherheitsgrenze für
47
+ Dateizugriffe. Ersetze `/absolute/path/to/your/documents` in den folgenden Beispielen durch den
48
+ absoluten Pfad zu deinen Dokumenten.
44
49
 
45
- mcp-local-rag verwendet das Standard-MCP-Protokoll über einen lokalen stdio-Server. Damit funktioniert es mit KI-Programmierwerkzeugen und anderen MCP-Hosts, die lokale MCP-Server unterstützen.
50
+ Nutze eines der folgenden Beispiele oder registriere `npx -y mcp-local-rag` im
51
+ Konfigurationsformat deines Clients und setze dort `BASE_DIR`.
46
52
 
47
- Nutze eines der folgenden Beispiele oder registriere `npx -y mcp-local-rag` im Konfigurationsformat deines Clients und setze dort `BASE_DIR`.
53
+ Setze auch `DB_PATH` und `CACHE_DIR` auf absolute Pfade. Relative Pfade beziehen sich auf das
54
+ Arbeitsverzeichnis des Servers. Wird er aus verschiedenen Projekten gestartet, entstehen
55
+ jeweils ein eigener Index und Modellcache.
48
56
 
49
- **Claude Code:** Führe diesen Befehl aus:
57
+ <details>
58
+ <summary>Claude Code</summary>
59
+
60
+ Führe diesen Befehl aus:
50
61
 
51
62
  ```bash
52
63
  claude mcp add local-rag --scope user --env BASE_DIR=/absolute/path/to/your/documents -- npx -y mcp-local-rag
53
64
  ```
54
65
 
55
- **Codex:** Ergänze `~/.codex/config.toml`:
66
+ </details>
67
+
68
+ <details>
69
+ <summary>Codex</summary>
70
+
71
+ Ergänze `~/.codex/config.toml`:
56
72
 
57
73
  ```toml
58
74
  [mcp_servers.local-rag]
@@ -63,7 +79,12 @@ args = ["-y", "mcp-local-rag"]
63
79
  BASE_DIR = "/absolute/path/to/your/documents"
64
80
  ```
65
81
 
66
- **OpenCode:** Ergänze `~/.config/opencode/opencode.json` (oder `opencode.jsonc`):
82
+ </details>
83
+
84
+ <details>
85
+ <summary>OpenCode</summary>
86
+
87
+ Ergänze `~/.config/opencode/opencode.json` (oder `opencode.jsonc`):
67
88
 
68
89
  ```json
69
90
  {
@@ -80,7 +101,12 @@ BASE_DIR = "/absolute/path/to/your/documents"
80
101
  }
81
102
  ```
82
103
 
83
- **Cursor:** Ergänze `~/.cursor/mcp.json`:
104
+ </details>
105
+
106
+ <details>
107
+ <summary>Cursor</summary>
108
+
109
+ Ergänze `~/.cursor/mcp.json`:
84
110
 
85
111
  ```json
86
112
  {
@@ -96,13 +122,17 @@ BASE_DIR = "/absolute/path/to/your/documents"
96
122
  }
97
123
  ```
98
124
 
125
+ </details>
126
+
99
127
  Starte den Client neu und lass ihn anschließend den Index aufbauen:
100
128
 
101
129
  ```text
102
130
  Synchronisiere alle Dokumente im konfigurierten Stammverzeichnis und warte, bis der Vorgang abgeschlossen ist.
103
131
  ```
104
132
 
105
- Bei der ersten Synchronisierung wird das Standard-Embedding-Modell heruntergeladen (etwa 90 MB). Bis der Import beginnt, können 1–2 Minuten vergehen. Spätere Durchläufe verwenden den lokalen Cache.
133
+ Bei der ersten Synchronisierung wird das Standard-Embedding-Modell heruntergeladen (etwa 90
134
+ MB). Bis der Import beginnt, können 1–2 Minuten vergehen. Spätere Durchläufe verwenden den
135
+ lokalen Cache.
106
136
 
107
137
  Nach Abschluss der Synchronisierung kannst du zum Beispiel fragen:
108
138
 
@@ -119,27 +149,45 @@ npx mcp-local-rag ingest ./docs/
119
149
  npx mcp-local-rag query "Authentifizierungs-API"
120
150
  ```
121
151
 
122
- Die CLI verwendet standardmäßig das aktuelle Verzeichnis als Dokumentenstamm. Führe beide Befehle im selben Verzeichnis aus, damit sie denselben Standardindex verwenden, oder setze `BASE_DIR` und `DB_PATH` ausdrücklich.
123
-
124
- ## Hintergrund
125
-
126
- Manche Dokumentensammlungen dürfen aus Vertraulichkeitsgründen oder aufgrund interner Richtlinien nicht an gehostete Embedding-Dienste gesendet werden. Mit einem lokalen Index bleiben sie durchsuchbar, ohne dass pro Anfrage API-Kosten entstehen.
127
-
128
- Eine rein semantische Suche kann exakte Bezeichner übersehen, die in technischer Dokumentation wichtig sind. Die Stichwortgewichtung hält diese Treffer sichtbar, ohne auf natürlichsprachliche Suche zu verzichten.
152
+ Die CLI verwendet standardmäßig das aktuelle Verzeichnis als Stammverzeichnis. Führe beide
153
+ Befehle im selben Verzeichnis aus, damit sie denselben Standardindex verwenden, oder setze
154
+ `BASE_DIR` und `DB_PATH` ausdrücklich.
129
155
 
130
156
  ## Unterstützte Inhalte
131
157
 
132
158
  | Eingabe | Import |
133
159
  |---|---|
134
160
  | PDF, DOCX, TXT, Markdown | Einzelne Datei importieren oder Verzeichnis synchronisieren |
135
- | Bereits vom Client abgerufenes HTML | Mit `ingest_data`; wird durch Readability bereinigt und in Markdown umgewandelt |
161
+ | Bereits vom Client abgerufenes HTML | `ingest_data` |
136
162
  | Im Speicher vorliegender Klartext oder Markdown | Mit `ingest_data` und einer stabilen Quellkennung |
137
163
 
138
- Der Server ruft HTML nicht selbst ab. Ein MCP-Client kann eine Seite laden und ihr HTML an `ingest_data` übergeben.
164
+ Der Server ruft HTML nicht selbst ab. Ein MCP-Client kann eine Seite laden und ihr HTML an
165
+ `ingest_data` übergeben.
166
+
167
+ Excel, PowerPoint, einzelne Bilddateien und Quellcodedateien werden beim Dateiimport nicht
168
+ unterstützt. Für Abbildungen in PDFs kann optional ein lokales Vision-Modell verwendet werden.
169
+ Das ist weder OCR noch Bildsuche.
170
+
171
+ ## Mit dem Index arbeiten
172
+
173
+ Synchronisiere den Index, nachdem du Dokumente hinzugefügt, geändert oder entfernt hast. Für
174
+ die Suche und das Nachlesen kannst du deinen MCP-Client zum Beispiel bitten:
175
+
176
+ ```text
177
+ Suche in der Dokumentation nach dem Verhalten bei ERR_CONNECTION_REFUSED.
178
+ Lies auch die Abschnitte vor und nach diesem Treffer.
179
+ ```
180
+
181
+ Du kannst auch einzelne Dateien oder bereits vom Client abgerufenes HTML importieren. Um einen
182
+ vorhandenen Eintrag neu aufzubauen, importiere das Dokument erneut mit demselben Pfad oder
183
+ derselben Quellkennung. `sync` überspringt unveränderte Dateien. MCP-Dateipfade müssen absolut
184
+ sein und innerhalb eines konfigurierten Stammverzeichnisses liegen.
139
185
 
140
- Excel, PowerPoint, einzelne Bilddateien und Quellcodedateien werden beim Dateiimport nicht unterstützt. Für Abbildungen in PDFs kann optional ein lokales Vision-Modell verwendet werden. Das ist weder OCR noch Bildsuche.
186
+ Bei PDFs können die erkannten Abschnittsüberschriften fehlerhaft sein. Wenn du die genaue
187
+ Überschrift brauchst, prüfe sie auf der Originalseite.
141
188
 
142
- ## MCP-Werkzeuge
189
+ <details>
190
+ <summary>MCP-Werkzeuge</summary>
143
191
 
144
192
  | Werkzeug | Zweck |
145
193
  |---|---|
@@ -153,131 +201,142 @@ Excel, PowerPoint, einzelne Bilddateien und Quellcodedateien werden beim Dateiim
153
201
  | `delete_file` | Eine indexierte Datei oder einen `ingest_data`-Eintrag löschen |
154
202
  | `status` | Status von Index und Suche anzeigen |
155
203
 
156
- ### Dokumentenstamm synchronisieren
157
-
158
- `sync_start` importiert neue und geänderte Dateien, überspringt bytegleiche Dateien und entfernt Indexeinträge für Dateien, die nicht mehr vorhanden sind:
159
-
160
- ```text
161
- Synchronisiere alle Inhalte in den konfigurierten Dokumentenstämmen und warte auf den Abschluss.
162
- ```
163
-
164
- Das Werkzeug gibt sofort eine `jobId` zurück. Clients sollten `sync_status` abfragen, bis der Status `succeeded` oder `failed` lautet. Ein geändertes PDF behält das visuelle Profil, mit dem es indexiert wurde; ein PDF ohne gespeichertes Profil bleibt reiner Text. `sync_start` kann das Profil nicht ändern.
165
-
166
- Der Serverprozess speichert nur einen Synchronisierungsauftrag. Ein neuer Auftrag ersetzt den Eintrag eines abgeschlossenen Auftrags. Beim Neustart des Servers geht der Eintrag verloren.
167
-
168
- ### Einzelne Datei importieren
169
-
170
- `ingest_file` unterstützt PDF, DOCX, TXT und Markdown. MCP-Dateipfade müssen absolut sein und innerhalb eines konfigurierten Dokumentenstamms liegen:
171
-
172
- ```text
173
- Importiere das Dokument /Users/me/docs/api-spec.pdf.
174
- ```
175
-
176
- Ein erneuter Import desselben Pfads ersetzt die vorhandenen Abschnitte.
177
-
178
- ### Suchen und weiteren Kontext lesen
204
+ </details>
179
205
 
180
- ```text
181
- Was steht in der API-Dokumentation zur Authentifizierung?
182
- Finde das dokumentierte Verhalten von ERR_CONNECTION_REFUSED.
183
- ```
206
+ ## CLI
184
207
 
185
- Ergebnisse enthalten Text, Quellpfad, Titel, Abschnittsnummer und Relevanzwert. Wenn mehr Kontext nötig ist, übergib `chunkIndex` und entweder `filePath` oder `source` aus dem Treffer an `read_chunk_neighbors`:
208
+ Mit der CLI kannst du den Index aktualisieren, die Suche eingrenzen oder indexierte Inhalte
209
+ entfernen:
186
210
 
187
- ```text
188
- Lies die benachbarten Abschnitte dieses Treffers zur Authentifizierung.
211
+ ```bash
212
+ npx mcp-local-rag sync ./docs/
213
+ npx mcp-local-rag query "Authentifizierung" --scope /docs/api --scope /docs/guide
214
+ npx mcp-local-rag read-neighbors --file-path /abs/path.md --chunk-index 5
215
+ npx mcp-local-rag list
216
+ npx mcp-local-rag status
217
+ npx mcp-local-rag delete ./docs/old.pdf
218
+ npx mcp-local-rag delete --source "https://example.com/docs"
189
219
  ```
190
220
 
191
- `query_documents` und `list_files` akzeptieren optional ein absolutes `scope`-Pfadpräfix oder eine Liste von Präfixen. Ein Präfix entspricht dem angegebenen Pfad und allen darunterliegenden Pfaden.
221
+ `ingest` importiert die ausgewählten Dateien. `sync` entfernt zusätzlich Einträge gelöschter
222
+ Dateien und überspringt unveränderte Dateien. Mit `--scope` beschränkst du Treffer auf ein
223
+ Pfadpräfix; wiederhole die Option, um mehrere Präfixe einzubeziehen.
192
224
 
193
- ### HTML importieren
225
+ Globale Optionen wie `--db-path`, `--cache-dir` und `--model-name` stehen vor dem Unterbefehl.
226
+ Optionen des Unterbefehls stehen dahinter:
194
227
 
195
- Rufe die Seite zuerst mit dem MCP-Client ab und verwende anschließend `ingest_data`:
196
-
197
- ```text
198
- Rufe https://example.com/docs ab und importiere das HTML.
228
+ ```bash
229
+ npx mcp-local-rag --db-path ./my-db query "Authentifizierung"
199
230
  ```
200
231
 
201
- Der Server extrahiert den Hauptinhalt, wandelt ihn in Markdown um und speichert ihn unter der angegebenen Quellkennung. Wird dieselbe Quelle erneut verwendet, wird der vorhandene Inhalt aktualisiert.
202
-
203
- Beachte beim Indexieren externer Inhalte die Nutzungsbedingungen und das Urheberrecht der Quelle.
204
-
205
- ### Abbildungen in PDFs
232
+ `npx mcp-local-rag --help` zeigt die vollständige Befehlsreferenz.
206
233
 
207
- Der visuelle Modus erzeugt Bildbeschreibungen für PDF-Seiten mit vielen Abbildungen. Er muss ausdrücklich aktiviert werden und lädt bei einem normalen Import kein Vision-Modell.
234
+ `query` schreibt seine Ergebnisse als JSON nach stdout, den besten Treffer zuerst, sodass sie
235
+ sich per Pipe an ein anderes Werkzeug übergeben lassen. Die Definition der einzelnen Felder
236
+ steht in [`docs/schema/query-output.schema.json`](docs/schema/query-output.schema.json).
208
237
 
209
- ```text
210
- Importiere /Users/me/docs/research-paper.pdf mit visual: true.
211
- ```
238
+ Wenn du ein Projekt verschieben und seinen Index behalten möchtest, beende zuerst den
239
+ MCP-Server und andere Schreibprozesse. Verschiebe die Dateien und die Datenbank zusammen, ohne
240
+ die Verzeichnisstruktur zu ändern, und führe dann diesen Befehl aus:
212
241
 
213
242
  ```bash
214
- npx mcp-local-rag ingest ./docs/research-paper.pdf --visual
243
+ npx mcp-local-rag --db-path /new/project/lancedb relocate --from /old/project --to /new/project
215
244
  ```
216
245
 
217
- | Profil | Modellcache | Geeignet für |
218
- |---|---:|---|
219
- | `fast` (Standard) | etwa 250 MB | Leichtgewichtige visuelle Indexierung |
220
- | `quality` | etwa 1,7 GB | Abbildungen mit Beschriftungen, Anmerkungen oder anderem Text im Bild |
246
+ Passe `BASE_DIR`/`BASE_DIRS`, `DB_PATH` und weitere betroffene Pfade in deiner MCP-Konfiguration
247
+ an und starte den Client neu.
221
248
 
222
- Wähle das größere Modell über MCP mit `visualQuality: "quality"` oder über die CLI mit `--visual-quality quality`. In CPU-Messungen dauerte die Inferenz etwa dreimal so lange wie mit `fast`; die tatsächliche Geschwindigkeit hängt von Hardware und Modellversion ab.
223
-
224
- #### Bestehende `quality`-Bildbeschreibungen aktualisieren
249
+ ## Agent Skills
225
250
 
226
- Ab 0.18.4 nutzt `quality` Qwen3.5-2B, frühere Versionen nutzten Qwen2.5-VL-3B. Bereits indexierte Bildbeschreibungen behalten den Wortlaut des alten Modells, und `sync` erzeugt sie nicht neu. Importiere die betroffenen Dateien erneut, um ihre Bildbeschreibungen zu aktualisieren:
251
+ [Agent Skills](https://agentskills.io/) geben KI-Assistenten Hinweise für Abfragen und Importe:
227
252
 
228
253
  ```bash
229
- npx mcp-local-rag ingest ./docs/research-paper.pdf --visual --visual-quality quality
254
+ npx mcp-local-rag skills install --claude-code
255
+ npx mcp-local-rag skills install --claude-code --global
256
+ npx mcp-local-rag skills install --codex
230
257
  ```
231
258
 
232
- Gib `--images` mit, wenn die Datei damit importiert wurde, denn ein Lauf ohne diese Option ersetzt die gespeicherten Bilder. Das alte Modell bleibt auf der Festplatte. Sobald es nicht mehr gebraucht wird, lösche `onnx-community/Qwen2.5-VL-3B-Instruct-ONNX/` aus dem Modellcache-Verzeichnis — `<cache-dir>`, standardmäßig `./models/`.
233
-
234
- #### Visueller Modus über Synchronisierungen hinweg
259
+ Die installierten Skills behandeln Abfrageformulierung, Trefferverfeinerung und HTML-Import.
260
+ Falls ein Skill nicht automatisch aktiviert wird, bitte den Assistenten ausdrücklich darum, den
261
+ mcp-local-rag-Skill zu verwenden.
235
262
 
236
- Das Profil, mit dem ein PDF indexiert wurde, wird gespeichert und von `sync` wiederverwendet: Ein mit `fast` oder `quality` indexiertes PDF wird mit demselben Profil neu importiert, ein PDF ohne gespeichertes Profil wird als Text importiert.
263
+ ## Erweiterte Optionen
237
264
 
238
- ```bash
239
- npx mcp-local-rag sync ./docs/ # gespeichertes Profil je PDF beibehalten
240
- npx mcp-local-rag sync ./docs/ --visual # fast für jedes PDF im Bereich anfordern
241
- npx mcp-local-rag sync ./docs/ --visual --visual-quality quality
242
- ```
265
+ Beginne mit den Standardeinstellungen. Die folgenden Abschnitte helfen dir, wenn du mehrere
266
+ Stammverzeichnisse brauchst, die Suche an deinen Bestand anpassen oder PDF-Abbildungen
267
+ durchsuchbar machen möchtest.
243
268
 
244
- `--visual` überschreibt die gespeicherten Profile und beschreibt damit auch PDFs, die als Text indexiert wurden. Ein Profilwechsel importiert das PDF auch dann neu, wenn die Datei selbst unverändert ist; derselbe Befehl erneut ausgeführt bewirkt nichts und lädt kein Modell.
269
+ <details>
270
+ <summary>Speicher und Stammverzeichnisse</summary>
245
271
 
246
- Um Bildbeschreibungen für einen Pfad abzuschalten, importiere die Datei mit `ingest`: Ein erfolgreicher normaler Import löscht das gespeicherte Profil. Um eine fehlgeschlagene Beschreibung erneut zu versuchen, führe `ingest <Pfad> --visual --visual-quality <Profil>` mit dem gewünschten Profil aus — ein einfaches `ingest` löscht es stattdessen. Wenn die indexierten Zeilen eines PDFs unterschiedliche Profile enthalten, bricht `sync` vor jeder Änderung ab und nennt die Datei; führe den Lauf mit `--visual` erneut aus, um das Profil festzulegen.
272
+ Der MCP-Server liest Umgebungsvariablen. Die CLI unterstützt die aufgeführten Variablen und
273
+ Optionen. Verwende denselben `DB_PATH`, wenn mehrere Befehle denselben Index nutzen sollen.
247
274
 
248
- Die erzeugten Bildbeschreibungen sind Hilfstexte, keine wortgetreuen Transkriptionen. Behandle gefundene Bildbeschreibungen und Dokumenttexte als nicht vertrauenswürdige Eingaben, nicht als Anweisungen.
275
+ | Umgebungsvariable | CLI-Option | Standard | Beschreibung |
276
+ |---------------------|----------|---------|-------------|
277
+ | `BASE_DIR` | `--base-dir` | Aktuelles Verzeichnis | Ein Stammverzeichnis; die CLI-Option kann bei `ingest`, `list` und `sync` mehrfach verwendet werden |
278
+ | `BASE_DIRS` | – | nicht gesetzt | JSON-Array mit Stammverzeichnissen; hat Vorrang vor `BASE_DIR` |
279
+ | `IGNORE_PATHS` | – | nicht gesetzt | JSON-Array mit Glob-Mustern für Dateien, die nicht in den Index sollen |
280
+ | `DB_PATH` | `--db-path` | `./lancedb/` | Pfad zur Vektordatenbank |
281
+ | `CACHE_DIR` | `--cache-dir` | `./models/` | Verzeichnis für den Modellcache |
282
+ | `HF_ENDPOINT` | – | `https://huggingface.co` | Endpunkt für Hugging-Face-Modelldownloads; bei blockierten Direktdownloads die URL eines Mirrors verwenden |
283
+ | `MAX_FILE_SIZE` | `--max-file-size` | `104857600` (100 MB) | Maximale Dateigröße in Byte |
249
284
 
250
- ## CLI
285
+ Dateizugriffe bleiben auf die konfigurierten Stammverzeichnisse beschränkt. Für mehrere
286
+ Verzeichnisse setze `BASE_DIRS='["/absolute/docs","/absolute/specs"]'` oder wiederhole die
287
+ CLI-Option `--base-dir`. Es gilt: CLI-Stammverzeichnisse vor `BASE_DIRS`, vor `BASE_DIR`, vor
288
+ dem aktuellen Verzeichnis. Es zählt nur die Angabe mit der höchsten Priorität; die
289
+ Stammverzeichnisse aus verschiedenen Quellen werden nicht zusammengeführt. Ungültiges
290
+ `BASE_DIRS` führt zu einem Fehler. Relative Werte für `DB_PATH` und `CACHE_DIR` beziehen sich
291
+ auf das Arbeitsverzeichnis.
292
+
293
+ Um Dateien aus dem Index herauszuhalten, setze `IGNORE_PATHS` auf ein JSON-Array mit
294
+ Glob-Mustern, zum Beispiel `IGNORE_PATHS='["plugs/**","**/*.draft.md"]'`. Jedes Muster wird mit
295
+ dem Pfad der Datei relativ zu ihrem Stammverzeichnis verglichen, auf jedem Betriebssystem mit
296
+ `/` geschrieben. `*` und `**` erfassen keine Namen, die mit `.` beginnen. Schreibe solche
297
+ Verzeichnisse aus, etwa `".obsidian/**"`. Wenn `ingest`, `list` und `sync` ein Verzeichnis
298
+ verarbeiten, überspringen sie passende Dateien, und `sync` entfernt bereits indexierte Dateien
299
+ wieder aus dem Index. Ungültiges `IGNORE_PATHS` führt zu einem Fehler.
251
300
 
252
- Die CLI verwendet ohne MCP-Client denselben Parser, Embedder und Vektorspeicher:
301
+ </details>
253
302
 
254
- ```bash
255
- npx mcp-local-rag ingest ./docs/
256
- npx mcp-local-rag sync ./docs/
257
- npx mcp-local-rag query "Authentifizierungs-API"
258
- npx mcp-local-rag query "Authentifizierung" --scope /docs/api --scope /docs/guide
259
- npx mcp-local-rag read-neighbors --file-path /abs/path.md --chunk-index 5
260
- npx mcp-local-rag list
261
- npx mcp-local-rag status
262
- npx mcp-local-rag delete ./docs/old.pdf
263
- npx mcp-local-rag delete --source "https://example.com/docs"
264
- ```
303
+ <details>
304
+ <summary>Modelle und Suchparameter</summary>
265
305
 
266
- Globale Optionen wie `--db-path`, `--cache-dir` und `--model-name` stehen vor dem Unterbefehl. Optionen des Unterbefehls stehen dahinter:
306
+ Wähle ein Embedding-Modell passend zur Sprache und zum Fachgebiet deiner Dokumente. Vergleiche
307
+ Einstellungen mit deinen tatsächlichen Fragen und prüfe, welche Textstellen gefunden werden.
308
+ Das Modell muss Mean Pooling und L2-Normalisierung unterstützen, da das Werkzeug damit die
309
+ Embeddings berechnet.
267
310
 
268
- ```bash
269
- npx mcp-local-rag --db-path ./my-db query "Authentifizierung"
270
- ```
311
+ | Umgebungsvariable | CLI-Option | Standard | Beschreibung |
312
+ |---------------------|----------|---------|-------------|
313
+ | `MODEL_NAME` | `--model-name` | `Xenova/all-MiniLM-L6-v2` | Hugging-Face-Embedding-Modell |
314
+ | `CHUNK_MIN_LENGTH` | `--chunk-min-length` | `50` | Mindestlänge eines gewöhnlichen Abschnitts in Zeichen (1–10000); ein Teilstück, das beim Teilen für das Token-Limit des Modells entsteht, darf kürzer sein |
315
+ | `EMBED_TITLE_PREFIX` | – | `false` | Ergänzt die Embedding-Eingabe jedes Abschnitts um den Dokumenttitel |
316
+ | `EMBED_HEADING_PREFIX` | – | `false` | Ergänzt die Embedding-Eingabe jedes Abschnitts um die Überschriftenhierarchie, sofern sie hineinpasst |
317
+ | `RAG_DEVICE` | – | `cpu` | ONNX-Runtime-Ausführungsgerät |
318
+ | `RAG_DTYPE` | – | `fp32` | An das ausgewählte Modell übergebener Embedding-Datentyp |
271
319
 
272
- `npx mcp-local-rag --help` zeigt die vollständige Befehlsreferenz.
320
+ Beide Präfixoptionen sind standardmäßig `false` und unabhängig voneinander nutzbar. Probiere
321
+ `EMBED_TITLE_PREFIX`, wenn einem Abschnitt das übergeordnete Dokumentthema fehlt, oder
322
+ `EMBED_HEADING_PREFIX`, wenn er das Thema seines Kapitels braucht. Beide zusammen liefern nicht
323
+ immer bessere Treffer. Sie beeinflussen die Embeddings, nicht den zurückgegebenen Text oder den
324
+ Stichwortindex; Überschriftenkontext entfällt, wenn er das Eingabelimit überschreiten würde.
273
325
 
274
- Die CLI liest keine MCP-Client-Konfiguration. Wenn beide Schnittstellen denselben Index verwenden sollen, müssen dieselben Umgebungsvariablen oder Optionen gesetzt sein. Insbesondere müssen `MODEL_NAME` und die CLI-Option `--model-name` für eine gemeinsam verwendete Datenbank übereinstimmen.
326
+ Erstelle bei einem Wechsel des Embedding-Modells einen neuen Index unter einem neuen `DB_PATH`.
327
+ Vektoren verschiedener Modelle sind auch bei gleicher Dimension nicht vergleichbar. Nach einer
328
+ Änderung von `RAG_DTYPE` oder einer Präfixoption musst du alle indexierten Dokumente erneut
329
+ importieren, bevor du suchst. `sync` überspringt unveränderte Dateien.
275
330
 
276
- `query` schreibt seine Ergebnisse als JSON nach stdout, den besten Treffer zuerst, sodass sie sich per Pipe an ein anderes Werkzeug übergeben lassen. Die Definition der einzelnen Felder steht in [`docs/schema/query-output.schema.json`](docs/schema/query-output.schema.json).
331
+ Die CLI liest keine MCP-Client-Konfiguration. Verwende bei einem gemeinsamen Index dasselbe
332
+ Modell, denselben `RAG_DTYPE` und dieselben Präfixeinstellungen für Import und Suche. Ein
333
+ Wechsel von `RAG_DEVICE` allein erfordert keinen neuen Index.
277
334
 
278
- ## Suchparameter anpassen
335
+ ### Suchparameter
279
336
 
280
- Die Stichwortgewichtung ist standardmäßig aktiv. Für Korpora, die eine strengere Auswahl erfordern, stehen außerdem die Gruppierung anhand von Relevanzsprüngen sowie Distanz- und Dateifilter zur Verfügung. Alle vier gelten für den MCP-Server und für `query` in der CLI gleichermaßen.
337
+ Die ersten vier Einstellungen in der Tabelle gelten für MCP und CLI. Wenn exakte Begriffe
338
+ stärker zählen sollen, erhöhe versuchsweise `RAG_HYBRID_WEIGHT` und vergleiche die Treffer
339
+ anhand deiner eigenen Fragen. Das externe Neuordnen ist nur über MCP verfügbar.
281
340
 
282
341
  | Variable | Standard | Beschreibung |
283
342
  |----------|---------|-------------|
@@ -285,125 +344,89 @@ Die Stichwortgewichtung ist standardmäßig aktiv. Für Korpora, die eine streng
285
344
  | `RAG_GROUPING` | nicht gesetzt | `similar` behält die erste Relevanzgruppe; `related` behält bis zu zwei Gruppen und trennt sie an deutlichen Sprüngen der Vektordistanz. |
286
345
  | `RAG_MAX_DISTANCE` | nicht gesetzt | Filtert wenig relevante Treffer heraus, zum Beispiel mit `0.5`. |
287
346
  | `RAG_MAX_FILES` | nicht gesetzt | Beschränkt die Treffer auf die besten N Dateien, zum Beispiel mit `1` auf die beste Datei. |
288
- | `RAG_RERANK_CMD` | nicht gesetzt | Nur MCP-Server: externer Befehl, der die Treffer neu ordnet. Deine Suchanfrage und der gefundene Text gehen an ihn. |
347
+ | `RAG_RERANK_CMD` | nicht gesetzt | Nur MCP: externer Befehl; `{query}` übergibt die Suchanfrage, `{top}` die angeforderte Trefferzahl. |
289
348
  | `RAG_RERANK_TIMEOUT_MS` | `10000` | Zeitbudget pro Neuordnung in Millisekunden (100–600000). |
290
349
 
291
- Bei API-Spezifikationen und anderen Dokumenten mit vielen Bezeichnern kann ein höheres Stichwortgewicht die Rangfolge exakter Treffer verbessern:
292
-
293
- ```json
294
- "env": {
295
- "RAG_HYBRID_WEIGHT": "0.7"
296
- }
297
- ```
298
-
299
- - `0.7`: etwas stärkere Gewichtung exakter Begriffe als in der Standardeinstellung
300
- - `1.0`: höchste Stichwortgewichtung
301
-
302
350
  ### Externes Neuordnen (`RAG_RERANK_CMD`)
303
351
 
304
- Nenne hier einen Befehl, und der Server übergibt ihm jede Trefferliste zum Neuordnen, zusammen mit deiner Suchanfrage und dem Text der gefundenen Abschnitte. Ein Befehl, der einen entfernten Dienst aufruft, sendet all das von diesem Rechner fort.
352
+ Der Befehl erhält die Suchtreffer samt Text über die Standardeingabe. Ruft er einen entfernten
353
+ Dienst auf, kann dieser Text den Rechner verlassen.
305
354
 
306
- Gib den Befehl und seine Argumente durch Leerzeichen getrennt an. Es muss eine ausführbare Datei sein: Der Server startet sie ohne Shell, deshalb lässt sich ein von npm installierter `.cmd`-Wrapper unter Windows nicht starten.
355
+ Gib die ausführbare Datei und die vollständige Argumentvorlage an. Setze `{query}` und `{top}`
356
+ dort ein, wo der Befehl die Suchanfrage und die Anzahl der Ergebnisse erwartet. Einfache oder
357
+ doppelte Anführungszeichen fassen Pfade oder Argumente mit Leerzeichen zusammen, und
358
+ Backslashes bleiben wörtlich. Der Server startet die ausführbare Datei ohne Shell, deshalb
359
+ lässt sich ein von npm installierter `.cmd`-Wrapper unter Windows nicht starten.
307
360
 
308
361
  ```json
309
- "env": {
310
- "RAG_RERANK_CMD": "/path/to/reranker",
311
- "RAG_RERANK_TIMEOUT_MS": "10000"
362
+ {
363
+ "env": {
364
+ "RAG_RERANK_CMD": "/path/to/reranker --query {query} --top {top}",
365
+ "RAG_RERANK_TIMEOUT_MS": "10000"
366
+ }
312
367
  }
313
368
  ```
314
369
 
315
- Der Befehl erhält jeden Treffer in der unter [`docs/schema/query-output.schema.json`](docs/schema/query-output.schema.json) veröffentlichten Form und muss in derselben Form antworten. Darin entscheidet er alles: was er behält, wie er es ordnet und was im Text steht. Was er zurückgibt, bekommst du zu sehen.
316
-
317
- Schlägt der Befehl fehl, läuft er in die Zeitgrenze oder antwortet er mit etwas, das diese Form nicht hat, bleibt die ursprüngliche Reihenfolge erhalten.
318
-
319
- ## Funktionsweise
320
-
321
- Beim Import:
322
-
323
- 1. Der Parser extrahiert den Text aus dem Eingabeformat.
324
- 2. Der semantische Chunker erkennt Themenwechsel und behält Markdown-Codeblöcke intakt.
325
- 3. Transformers.js erzeugt die Embeddings lokal.
326
- 4. LanceDB speichert Abschnitte, Metadaten, Vektoren und den Volltextindex.
327
-
328
- Bei der Suche:
329
-
330
- 1. Die Abfrage wird mit demselben Modell eingebettet.
331
- 2. Die Vektorsuche findet semantisch verwandte Abschnitte.
332
- 3. Optionale Distanzfilter und Relevanzgruppen schränken die Kandidaten weiter ein.
333
- 4. Volltexttreffer erhöhen das Gewicht exakter Suchbegriffe.
334
-
335
- ## Agent Skills
336
-
337
- [Agent Skills](https://agentskills.io/) geben KI-Assistenten Hinweise für Abfragen und Importe:
338
-
339
- ```bash
340
- npx mcp-local-rag skills install --claude-code
341
- npx mcp-local-rag skills install --claude-code --global
342
- npx mcp-local-rag skills install --codex
343
- ```
370
+ Der Befehl muss Ergebnisse im Format des [Ausgabeschemas](docs/schema/query-output.schema.json)
371
+ lesen und zurückgeben. Er kann Treffer entfernen, umsortieren oder deren Text ändern. Der
372
+ Server gibt seine Ausgabe zurück.
344
373
 
345
- Die installierten Skills behandeln Abfrageformulierung, Trefferverfeinerung und HTML-Import. Falls ein Skill nicht automatisch aktiviert wird, bitte den Assistenten ausdrücklich darum, den mcp-local-rag-Skill zu verwenden.
374
+ Die ursprüngliche Reihenfolge bleibt erhalten, wenn der Befehl fehlschlägt, das Zeitlimit
375
+ überschreitet oder eine Antwort zurückgibt, die nicht dem Schema entspricht.
346
376
 
347
- ## Konfiguration
377
+ </details>
348
378
 
349
- Der MCP-Server liest Umgebungsvariablen. Die CLI unterstützt dieselben Variablen sowie die aufgeführten Optionen; CLI-Optionen haben Vorrang.
379
+ <details>
380
+ <summary>PDF-Abbildungen und gespeicherte Bilder</summary>
350
381
 
351
- | Umgebungsvariable | CLI-Option | Standard | Beschreibung |
352
- |---------------------|----------|---------|-------------|
353
- | `BASE_DIR` | `--base-dir` | Aktuelles Verzeichnis | Ein Dokumentenstamm; die CLI-Option kann bei `ingest`, `list` und `sync` mehrfach verwendet werden |
354
- | `BASE_DIRS` | – | nicht gesetzt | JSON-Array mit Dokumentenstämmen; hat Vorrang vor `BASE_DIR` |
355
- | `DB_PATH` | `--db-path` | `./lancedb/` | Pfad zur Vektordatenbank |
356
- | `CACHE_DIR` | `--cache-dir` | `./models/` | Verzeichnis für den Modellcache |
357
- | `HF_ENDPOINT` | – | `https://huggingface.co` | Endpunkt für Hugging-Face-Modelldownloads; bei blockierten Direktdownloads die URL eines Mirrors verwenden |
358
- | `MODEL_NAME` | `--model-name` | `Xenova/all-MiniLM-L6-v2` | Hugging-Face-Embedding-Modell |
359
- | `MAX_FILE_SIZE` | `--max-file-size` | `104857600` (100 MB) | Maximale Dateigröße in Byte |
360
- | `CHUNK_MIN_LENGTH` | `--chunk-min-length` | `50` | Mindestlänge eines gewöhnlichen Abschnitts in Zeichen (1–10000); ein Teilstück, das beim Teilen für das Token-Limit des Modells entsteht, darf kürzer sein |
361
- | `RAG_DEVICE` | – | `cpu` | ONNX-Runtime-Ausführungsgerät |
362
- | `RAG_DTYPE` | – | `fp32` | An das ausgewählte Modell übergebener Embedding-Datentyp |
382
+ Standardmäßig indexiert der Import nur Text. Für PDF-Abbildungen kannst du lokale
383
+ Bildbeschreibungen mit `visual: true` in MCP oder `--visual` in der CLI aktivieren. Die
384
+ Beschreibungen sind weder OCR noch wortgetreue Transkriptionen.
363
385
 
364
- ### Dokumentenstämme (`BASE_DIR` und `BASE_DIRS`)
386
+ `fast` (Standard) lädt bei der ersten Verwendung etwa 250 MB herunter. Für Beschriftungen und
387
+ Text innerhalb von Abbildungen eignet sich `quality`; dafür werden etwa 1,7 GB heruntergeladen,
388
+ und die Verarbeitung dauert länger.
365
389
 
366
- mcp-local-rag erlaubt Dateizugriffe nur innerhalb der konfigurierten Stammverzeichnisse. Für mehrere Stammverzeichnisse muss `BASE_DIRS` ein JSON-Array mit nicht leeren Pfaden sein:
390
+ Wähle das Profil mit `visualQuality: "quality"` in MCP oder `--visual-quality quality` in der
391
+ CLI.
367
392
 
368
393
  ```bash
369
- export BASE_DIRS='["/Users/me/Documents/work","/Users/me/Projects/specs"]'
394
+ npx mcp-local-rag ingest ./docs/paper.pdf --visual --visual-quality quality
370
395
  ```
371
396
 
372
- Die Stammverzeichnisse werden in dieser Reihenfolge ermittelt:
373
-
374
- 1. CLI-Optionen `--base-dir <path>` (mehrfach bei `ingest`, `list` und `sync` möglich)
375
- 2. `BASE_DIRS`
376
- 3. `BASE_DIR`
377
- 4. Aktuelles Verzeichnis
378
-
379
- Jede Quelle ersetzt die nachrangige Quelle vollständig, statt mit ihr zusammengeführt zu werden. Eine ungültige `BASE_DIRS`-Konfiguration führt zu einem Fehler; es wird nicht auf `BASE_DIR` oder das aktuelle Verzeichnis zurückgegriffen. `status` bleibt in MCP verfügbar, damit der Client den Konfigurationsfehler melden kann.
397
+ Um Bilder zusammen mit passenden Texttreffern zurückzugeben, setze `STORE_IMAGES=true` in MCP
398
+ oder verwende `--images` bei CLI-`ingest` und `sync`. Das funktioniert unabhängig von
399
+ Bildbeschreibungen und unterstützt erkannte PDF-Abbildungen und Tabellen sowie unterstützte
400
+ PNG/JPEG-Bilder aus DOCX.
380
401
 
381
402
  ```bash
382
- npx mcp-local-rag ingest --base-dir /Users/me/work --base-dir /Users/me/specs /Users/me/work/readme.md
383
- npx mcp-local-rag list --base-dir /Users/me/work --base-dir /Users/me/specs
384
- npx mcp-local-rag sync --base-dir /Users/me/work --base-dir /Users/me/specs
385
- BASE_DIRS='["/Users/me/work","/Users/me/specs"]' npx mcp-local-rag list
403
+ npx mcp-local-rag ingest ./docs/paper.pdf --images
386
404
  ```
387
405
 
388
- ### Speicher und Modelle
406
+ Sync behält das Bildbeschreibungsprofil jedes PDFs bei. CLI-`sync --visual --visual-quality
407
+ quality` ändert es auch bei unveränderten PDFs; MCP-Sync behält es bei. Ein normaler Import
408
+ schaltet Bildbeschreibungen ab. Um fehlgeschlagene Beschreibungen erneut zu versuchen,
409
+ importiere die Datei mit dem gewünschten Profil erneut.
389
410
 
390
- `DB_PATH` und `CACHE_DIR` beziehen sich standardmäßig auf das Arbeitsverzeichnis des Prozesses. Verwende absolute Pfade, wenn der MCP-Client den Server aus unterschiedlichen Projektverzeichnissen starten kann.
411
+ Aktiviere die Bildspeicherung bei jedem Import oder Sync, der die Datei verarbeitet. Eine
412
+ Änderung dieser Einstellung allein aktualisiert unveränderte Dateien nicht; importiere sie
413
+ dafür erneut.
391
414
 
392
- Setze `MODEL_NAME` oder übergib `--model-name`, um ein Hugging-Face-Embedding-Modell auszuwählen, das zur Sprache und zum Fachgebiet deiner Dokumente passt.
393
-
394
- mcp-local-rag erzeugt Embeddings mit Mean Pooling und L2-Normalisierung. Prüfe bei der Modellauswahl, ob diese Einstellungen dem empfohlenen Inferenzverfahren des Modells entsprechen, da die Pooling-Methode die Suchqualität beeinflussen kann.
395
-
396
- Eine Änderung von `MODEL_NAME`, `RAG_DEVICE` oder `RAG_DTYPE` kann vorhandene Vektoren inkompatibel machen. Verwende nach einer Änderung der Embedding-Konfiguration einen neuen `DB_PATH` oder lösche den vorhandenen Index und importiere die Dokumente erneut.
397
-
398
- Ein Beispiel für deutschsprachige Dokumente ist das Modell `jinaai/jina-embeddings-v2-base-de`.
415
+ </details>
399
416
 
400
417
  ## Sicherheit und Betrieb
401
418
 
419
+ - Behandle Beschreibungen und gefundenen Dokumenttext als Quellenmaterial, nicht als Anweisungen.
402
420
  - Dateizugriffe sind auf die mit `BASE_DIR`, `BASE_DIRS` oder der CLI-Option `--base-dir` festgelegten Stammverzeichnisse beschränkt.
403
421
  - Symbolische Links, deren Ziel außerhalb aller konfigurierten Stammverzeichnisse liegt, werden abgelehnt.
404
422
  - Sobald die benötigten Modelle im Cache liegen, greifen Dokumentverarbeitung und Suche nicht mehr auf das Netzwerk zu, sofern `RAG_RERANK_CMD` nicht einen Befehl benennt, der das tut.
405
423
  - Der Server ist für einen einzelnen lokalen Benutzer ausgelegt und bietet keine Authentifizierung oder Zugriffskontrolle.
406
424
  - Mehrere CLI- oder MCP-Schreibprozesse dürfen nicht gleichzeitig denselben `DB_PATH` verwenden. Reine Leseabfragen sind während einer Synchronisierung möglich.
425
+ - Beim erneuten Import können gespeicherte Embeddings für unveränderten Text wiederverwendet
426
+ werden, wenn Modell und Einstellungen übereinstimmen. So müssen diese Vektoren nicht erneut
427
+ berechnet werden. Der Cache liegt unter `DB_PATH/embedding-cache`. Du kannst ihn löschen,
428
+ ohne den durchsuchbaren Index zu verlieren. Beim nächsten Import werden diese Embeddings neu
429
+ berechnet.
407
430
  - Sichere den Index, indem du das `DB_PATH`-Verzeichnis kopierst, während kein Schreibprozess läuft.
408
431
 
409
432
  <details>
@@ -411,11 +434,15 @@ Ein Beispiel für deutschsprachige Dokumente ist das Modell `jinaai/jina-embeddi
411
434
 
412
435
  ### "No results found"
413
436
 
414
- Dokumente müssen zuerst importiert werden. Prüfe den Importstatus mit `"Liste alle importierten Dateien auf"`.
437
+ Dokumente müssen zuerst importiert werden. Prüfe den Importstatus mit `"Liste alle importierten
438
+ Dateien auf"`. Fehlen nach einem Sync die Treffer, prüfe, ob Import und Suche denselben
439
+ absoluten `DB_PATH` verwenden. Ein relativer Pfad kann auf einen anderen Index zeigen.
415
440
 
416
441
  ### Modelldownload fehlgeschlagen
417
442
 
418
- Prüfe die Internetverbindung. Wenn du einen Proxy verwendest, kontrolliere die Netzwerkeinstellungen. Das Modell kann auch [manuell heruntergeladen](https://huggingface.co/Xenova/all-MiniLM-L6-v2) werden.
443
+ Prüfe die Internetverbindung. Wenn du einen Proxy verwendest, kontrolliere die
444
+ Netzwerkeinstellungen. Das Modell kann auch [manuell
445
+ heruntergeladen](https://huggingface.co/Xenova/all-MiniLM-L6-v2) werden.
419
446
 
420
447
  ### "File too large"
421
448
 
@@ -423,11 +450,14 @@ Die Standardgrenze beträgt 100 MB. Teile die Datei auf oder erhöhe `MAX_FILE_S
423
450
 
424
451
  ### Langsame Abfragen
425
452
 
426
- Prüfe die Anzahl der Abschnitte mit `status`. Große Dokumente mit vielen Abschnitten können Abfragen verlangsamen. Sehr große Dateien sollten gegebenenfalls geteilt werden.
453
+ Prüfe die Anzahl der Abschnitte mit `status`. Große Dokumente mit vielen Abschnitten können
454
+ Abfragen verlangsamen. Sehr große Dateien sollten gegebenenfalls geteilt werden.
427
455
 
428
456
  ### "Path outside BASE_DIR"
429
457
 
430
- Der Dateipfad muss innerhalb eines konfigurierten Stammverzeichnisses liegen: `BASE_DIR`, ein Eintrag aus `BASE_DIRS` oder ein über `--base-dir` gesetzter Pfad. Verwende einen absoluten Pfad.
458
+ Der Dateipfad muss innerhalb eines konfigurierten Stammverzeichnisses liegen: `BASE_DIR`, ein
459
+ Eintrag aus `BASE_DIRS` oder ein über `--base-dir` gesetzter Pfad. Verwende einen absoluten
460
+ Pfad.
431
461
 
432
462
  ### "BASE_DIRS must be a JSON array..."
433
463
 
@@ -447,7 +477,8 @@ Der Dateipfad muss innerhalb eines konfigurierten Stammverzeichnisses liegen: `B
447
477
 
448
478
  ## Mitwirken
449
479
 
450
- Beiträge sind willkommen. Hinweise zur Einrichtung und zu den Richtlinien stehen in [CONTRIBUTING.md](CONTRIBUTING.md).
480
+ Beiträge sind willkommen. Hinweise zur Einrichtung und zu den Richtlinien stehen in
481
+ [CONTRIBUTING.md](CONTRIBUTING.md).
451
482
 
452
483
  ## Lizenz
453
484
 
@@ -459,4 +490,6 @@ MIT-Lizenz. Kostenlose Nutzung für private und kommerzielle Zwecke.
459
490
 
460
491
  ## Danksagung
461
492
 
462
- Erstellt mit dem [Model Context Protocol](https://modelcontextprotocol.io/) von Anthropic, [LanceDB](https://lancedb.com/) und [Transformers.js](https://huggingface.co/docs/transformers.js).
493
+ Erstellt mit dem [Model Context Protocol](https://modelcontextprotocol.io/) von Anthropic,
494
+ [LanceDB](https://lancedb.com/) und
495
+ [Transformers.js](https://huggingface.co/docs/transformers.js).