@ssmeo/mcp-local-rag 0.18.13 → 0.19.0

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 (165) 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/download-model.d.ts +3 -0
  19. package/dist/cli/download-model.d.ts.map +1 -0
  20. package/dist/cli/download-model.js +21 -0
  21. package/dist/cli/download-model.js.map +1 -0
  22. package/dist/cli/file-collection.d.ts +2 -1
  23. package/dist/cli/file-collection.d.ts.map +1 -1
  24. package/dist/cli/file-collection.js +2 -2
  25. package/dist/cli/file-collection.js.map +1 -1
  26. package/dist/cli/ingest.d.ts +1 -0
  27. package/dist/cli/ingest.d.ts.map +1 -1
  28. package/dist/cli/ingest.js +45 -25
  29. package/dist/cli/ingest.js.map +1 -1
  30. package/dist/cli/list.d.ts.map +1 -1
  31. package/dist/cli/list.js +9 -13
  32. package/dist/cli/list.js.map +1 -1
  33. package/dist/cli/options.d.ts +8 -0
  34. package/dist/cli/options.d.ts.map +1 -1
  35. package/dist/cli/options.js +21 -0
  36. package/dist/cli/options.js.map +1 -1
  37. package/dist/cli/query.d.ts.map +1 -1
  38. package/dist/cli/query.js +2 -1
  39. package/dist/cli/query.js.map +1 -1
  40. package/dist/cli/read-neighbors.d.ts.map +1 -1
  41. package/dist/cli/read-neighbors.js +1 -0
  42. package/dist/cli/read-neighbors.js.map +1 -1
  43. package/dist/cli/relocate.d.ts +3 -0
  44. package/dist/cli/relocate.d.ts.map +1 -0
  45. package/dist/cli/relocate.js +135 -0
  46. package/dist/cli/relocate.js.map +1 -0
  47. package/dist/cli/sync.d.ts.map +1 -1
  48. package/dist/cli/sync.js +17 -8
  49. package/dist/cli/sync.js.map +1 -1
  50. package/dist/cli-main.d.ts +1 -1
  51. package/dist/cli-main.d.ts.map +1 -1
  52. package/dist/cli-main.js +5 -0
  53. package/dist/cli-main.js.map +1 -1
  54. package/dist/embedder/embedding-snapshot.d.ts +52 -0
  55. package/dist/embedder/embedding-snapshot.d.ts.map +1 -0
  56. package/dist/embedder/embedding-snapshot.js +413 -0
  57. package/dist/embedder/embedding-snapshot.js.map +1 -0
  58. package/dist/embedder/index.d.ts +36 -5
  59. package/dist/embedder/index.d.ts.map +1 -1
  60. package/dist/embedder/index.js +351 -24
  61. package/dist/embedder/index.js.map +1 -1
  62. package/dist/embedder/remote.d.ts +42 -4
  63. package/dist/embedder/remote.d.ts.map +1 -1
  64. package/dist/embedder/remote.js +113 -5
  65. package/dist/embedder/remote.js.map +1 -1
  66. package/dist/embedder/sentence-transformers-config.d.ts +24 -0
  67. package/dist/embedder/sentence-transformers-config.d.ts.map +1 -0
  68. package/dist/embedder/sentence-transformers-config.js +93 -0
  69. package/dist/embedder/sentence-transformers-config.js.map +1 -0
  70. package/dist/features/sync.js +1 -1
  71. package/dist/features/sync.js.map +1 -1
  72. package/dist/ingest/compute.d.ts +15 -7
  73. package/dist/ingest/compute.d.ts.map +1 -1
  74. package/dist/ingest/compute.js +74 -14
  75. package/dist/ingest/compute.js.map +1 -1
  76. package/dist/ingest/file.d.ts +3 -3
  77. package/dist/ingest/file.d.ts.map +1 -1
  78. package/dist/ingest/file.js +0 -5
  79. package/dist/ingest/file.js.map +1 -1
  80. package/dist/ingest/visual.d.ts +6 -2
  81. package/dist/ingest/visual.d.ts.map +1 -1
  82. package/dist/ingest/visual.js +20 -4
  83. package/dist/ingest/visual.js.map +1 -1
  84. package/dist/parser/docx-parser.d.ts +2 -0
  85. package/dist/parser/docx-parser.d.ts.map +1 -1
  86. package/dist/parser/docx-parser.js +12 -3
  87. package/dist/parser/docx-parser.js.map +1 -1
  88. package/dist/parser/index.d.ts +11 -1
  89. package/dist/parser/index.d.ts.map +1 -1
  90. package/dist/parser/index.js +27 -11
  91. package/dist/parser/index.js.map +1 -1
  92. package/dist/parser/pdf-extract.d.ts +2 -0
  93. package/dist/parser/pdf-extract.d.ts.map +1 -1
  94. package/dist/parser/pdf-extract.js +3 -0
  95. package/dist/parser/pdf-extract.js.map +1 -1
  96. package/dist/parser/pdf-filter.d.ts +2 -9
  97. package/dist/parser/pdf-filter.d.ts.map +1 -1
  98. package/dist/parser/pdf-filter.js +110 -144
  99. package/dist/parser/pdf-filter.js.map +1 -1
  100. package/dist/parser/pdf-headings.d.ts +6 -0
  101. package/dist/parser/pdf-headings.d.ts.map +1 -0
  102. package/dist/parser/pdf-headings.js +166 -0
  103. package/dist/parser/pdf-headings.js.map +1 -0
  104. package/dist/parser/text-source-map.d.ts +3 -0
  105. package/dist/parser/text-source-map.d.ts.map +1 -0
  106. package/dist/parser/text-source-map.js +33 -0
  107. package/dist/parser/text-source-map.js.map +1 -0
  108. package/dist/pdf-visual/captioner.d.ts.map +1 -1
  109. package/dist/pdf-visual/captioner.js +7 -4
  110. package/dist/pdf-visual/captioner.js.map +1 -1
  111. package/dist/pdf-visual/detector.js +3 -3
  112. package/dist/pdf-visual/detector.js.map +1 -1
  113. package/dist/rerank/command.d.ts +10 -7
  114. package/dist/rerank/command.d.ts.map +1 -1
  115. package/dist/rerank/command.js +51 -10
  116. package/dist/rerank/command.js.map +1 -1
  117. package/dist/rerank/index.d.ts +3 -3
  118. package/dist/rerank/index.d.ts.map +1 -1
  119. package/dist/rerank/index.js +3 -3
  120. package/dist/rerank/index.js.map +1 -1
  121. package/dist/server/index.d.ts +8 -1
  122. package/dist/server/index.d.ts.map +1 -1
  123. package/dist/server/index.js +129 -81
  124. package/dist/server/index.js.map +1 -1
  125. package/dist/server/list-scanner.d.ts +2 -1
  126. package/dist/server/list-scanner.d.ts.map +1 -1
  127. package/dist/server/list-scanner.js +2 -2
  128. package/dist/server/list-scanner.js.map +1 -1
  129. package/dist/server/tool-definitions.js +2 -2
  130. package/dist/server/tool-definitions.js.map +1 -1
  131. package/dist/server/types.d.ts +9 -0
  132. package/dist/server/types.d.ts.map +1 -1
  133. package/dist/server-main.d.ts +2 -2
  134. package/dist/server-main.d.ts.map +1 -1
  135. package/dist/server-main.js +22 -20
  136. package/dist/server-main.js.map +1 -1
  137. package/dist/utils/base-dirs.d.ts +9 -10
  138. package/dist/utils/base-dirs.d.ts.map +1 -1
  139. package/dist/utils/base-dirs.js +28 -30
  140. package/dist/utils/base-dirs.js.map +1 -1
  141. package/dist/utils/scan.d.ts +25 -5
  142. package/dist/utils/scan.d.ts.map +1 -1
  143. package/dist/utils/scan.js +40 -10
  144. package/dist/utils/scan.js.map +1 -1
  145. package/dist/utils/source-context.d.ts +29 -0
  146. package/dist/utils/source-context.d.ts.map +1 -0
  147. package/dist/utils/source-context.js +86 -0
  148. package/dist/utils/source-context.js.map +1 -0
  149. package/dist/utils/sync-path-key.d.ts +1 -1
  150. package/dist/utils/sync-path-key.d.ts.map +1 -1
  151. package/dist/utils/sync-path-key.js +1 -1
  152. package/dist/utils/sync-path-key.js.map +1 -1
  153. package/dist/vectordb/index.d.ts +4 -2
  154. package/dist/vectordb/index.d.ts.map +1 -1
  155. package/dist/vectordb/index.js +33 -8
  156. package/dist/vectordb/index.js.map +1 -1
  157. package/dist/vectordb/relocate.d.ts +18 -0
  158. package/dist/vectordb/relocate.d.ts.map +1 -0
  159. package/dist/vectordb/relocate.js +179 -0
  160. package/dist/vectordb/relocate.js.map +1 -0
  161. package/dist/vectordb/types.d.ts +10 -23
  162. package/dist/vectordb/types.d.ts.map +1 -1
  163. package/dist/vectordb/types.js +14 -23
  164. package/dist/vectordb/types.js.map +1 -1
  165. package/package.json +14 -14
package/README.fr.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,54 @@
18
22
  <strong>Français</strong>
19
23
  </p>
20
24
 
21
- Recherchez dans des documents confidentiels depuis un client MCP ou un terminal, sans les envoyer à une API d'embeddings.
25
+ Recherchez dans des documents confidentiels depuis un client MCP ou un terminal, sans les
26
+ envoyer à une API d'embeddings.
22
27
 
23
- mcp-local-rag indexe les fichiers PDF, DOCX et Markdown ainsi que les fichiers texte sur votre machine. La recherche associe similarité sémantique et correspondance par mots-clés. Elle tient ainsi compte du sens de la requête comme des termes techniques exacts, tels que les noms d'API, de classes et les codes d'erreur.
28
+ mcp-local-rag indexe les fichiers PDF, DOCX et Markdown ainsi que les fichiers texte sur votre
29
+ machine. La recherche associe similarité sémantique et correspondance par mots-clés. Elle tient
30
+ ainsi compte du sens de la requête comme des termes techniques exacts, tels que les noms d'API,
31
+ de classes et les codes d'erreur. Les résultats contiennent des passages du document et,
32
+ lorsqu'ils sont disponibles, des titres de section et des numéros de ligne ou de page pour
33
+ consulter et citer l'original.
24
34
 
25
- ## Fonctionnalités
26
-
27
- - **Exécution locale :** L'analyse des documents, les embeddings, le stockage et la recherche s'effectuent sur votre machine. Une fois le modèle téléchargé, l'import de texte et la recherche fonctionnent hors ligne.
28
- - **Recherche hybride :** La recherche sémantique trouve les concepts voisins, tandis que la correspondance par mots-clés améliore le classement des termes techniques exacts.
29
- - **Embeddings configurables :** Choisissez un modèle d'embeddings Hugging Face adapté à la langue et au domaine de vos documents.
30
- - **Découpage sémantique :** Les documents sont découpés aux changements de sujet plutôt qu'après un nombre fixe de caractères. Les blocs de code Markdown restent intacts.
31
- - **MCP et CLI :** Utilisez le même index depuis un outil de programmation assisté par IA ou directement dans le terminal.
32
-
33
- Aucune clé d'API, aucun conteneur Docker, aucune installation de Python ni aucune base de données externe ne sont nécessaires.
35
+ Aucune clé d'API, aucun conteneur Docker, aucune installation de Python ni aucune base de
36
+ données externe n'est nécessaire. Après le premier téléchargement du modèle, l'import de texte
37
+ et la recherche fonctionnent hors ligne.
34
38
 
35
39
  ## Démarrage rapide
36
40
 
37
41
  ### Prérequis
38
42
 
39
- - Node.js 22 ou version ultérieure
43
+ - Node.js 22.20 ou version ultérieure
40
44
  - Une connexion Internet lors de la première utilisation pour télécharger le paquet npm et le modèle d'embeddings
41
45
  - Un répertoire contenant les documents à rechercher
42
46
 
43
- Définissez `BASE_DIR` sur ce répertoire. Il sert également de limite de sécurité pour les opérations sur les fichiers. Remplacez `/absolute/path/to/your/documents` dans les exemples par le chemin absolu du répertoire.
47
+ Définissez `BASE_DIR` sur ce répertoire. Il sert également de limite de sécurité pour les
48
+ opérations sur les fichiers. Remplacez `/absolute/path/to/your/documents` dans les exemples par
49
+ le chemin absolu du répertoire.
44
50
 
45
- mcp-local-rag utilise le protocole MCP standard via un serveur stdio local. Il fonctionne donc avec les outils de programmation assistés par IA et les autres hôtes MCP qui prennent en charge les serveurs MCP locaux.
51
+ Utilisez l'un des exemples ci-dessous, ou enregistrez `npx -y mcp-local-rag` et définissez
52
+ `BASE_DIR` selon le format de configuration MCP de votre client.
46
53
 
47
- Utilisez l'un des exemples ci-dessous, ou enregistrez `npx -y mcp-local-rag` et définissez `BASE_DIR` selon le format de configuration MCP de votre client.
54
+ Définissez aussi `DB_PATH` et `CACHE_DIR` avec des chemins absolus. Les chemins relatifs
55
+ partent du répertoire de travail du serveur : le démarrer depuis différents projets crée un
56
+ index et un cache de modèles dans chacun.
48
57
 
49
- **Claude Code :** Exécutez cette commande :
58
+ <details>
59
+ <summary>Claude Code</summary>
60
+
61
+ Exécutez cette commande :
50
62
 
51
63
  ```bash
52
64
  claude mcp add local-rag --scope user --env BASE_DIR=/absolute/path/to/your/documents -- npx -y mcp-local-rag
53
65
  ```
54
66
 
55
- **Codex :** Ajoutez ceci à `~/.codex/config.toml` :
67
+ </details>
68
+
69
+ <details>
70
+ <summary>Codex</summary>
71
+
72
+ Ajoutez ceci à `~/.codex/config.toml` :
56
73
 
57
74
  ```toml
58
75
  [mcp_servers.local-rag]
@@ -63,7 +80,12 @@ args = ["-y", "mcp-local-rag"]
63
80
  BASE_DIR = "/absolute/path/to/your/documents"
64
81
  ```
65
82
 
66
- **OpenCode :** Ajoutez ceci à `~/.config/opencode/opencode.json` (ou `opencode.jsonc`) :
83
+ </details>
84
+
85
+ <details>
86
+ <summary>OpenCode</summary>
87
+
88
+ Ajoutez ceci à `~/.config/opencode/opencode.json` (ou `opencode.jsonc`) :
67
89
 
68
90
  ```json
69
91
  {
@@ -80,7 +102,12 @@ BASE_DIR = "/absolute/path/to/your/documents"
80
102
  }
81
103
  ```
82
104
 
83
- **Cursor :** Ajoutez ceci à `~/.cursor/mcp.json` :
105
+ </details>
106
+
107
+ <details>
108
+ <summary>Cursor</summary>
109
+
110
+ Ajoutez ceci à `~/.cursor/mcp.json` :
84
111
 
85
112
  ```json
86
113
  {
@@ -96,13 +123,17 @@ BASE_DIR = "/absolute/path/to/your/documents"
96
123
  }
97
124
  ```
98
125
 
126
+ </details>
127
+
99
128
  Redémarrez le client, puis demandez-lui de construire l'index :
100
129
 
101
130
  ```text
102
131
  Synchronise tous les documents du répertoire racine configuré et attends la fin de l'opération.
103
132
  ```
104
133
 
105
- La première synchronisation télécharge le modèle d'embeddings par défaut (environ 90 Mo). Une à deux minutes peuvent s'écouler avant le début de l'import. Les exécutions suivantes utilisent le cache local.
134
+ La première synchronisation télécharge le modèle d'embeddings par défaut (environ 90 Mo). Une à
135
+ deux minutes peuvent s'écouler avant le début de l'import. Les exécutions suivantes utilisent
136
+ le cache local.
106
137
 
107
138
  Une fois la synchronisation terminée, posez une question :
108
139
 
@@ -119,27 +150,45 @@ npx mcp-local-rag ingest ./docs/
119
150
  npx mcp-local-rag query "API d'authentification"
120
151
  ```
121
152
 
122
- Par défaut, la CLI utilise le répertoire courant comme racine documentaire. Exécutez les deux commandes depuis le même répertoire pour qu'elles partagent l'index par défaut, ou définissez explicitement `BASE_DIR` et `DB_PATH`.
123
-
124
- ## Pourquoi ce projet
125
-
126
- Certains documents ne peuvent pas être envoyés à un service d'embeddings hébergé pour des raisons de confidentialité ou de politique interne. Un index local permet de les rechercher sans ajouter de coût d'API à chaque requête.
127
-
128
- Une recherche uniquement sémantique peut ignorer des identifiants exacts qui comptent dans la documentation technique. Le reclassement par mots-clés garde ces termes visibles sans renoncer aux requêtes en langage naturel.
153
+ Par défaut, la CLI utilise le répertoire courant comme racine documentaire. Exécutez les deux
154
+ commandes depuis le même répertoire pour qu'elles partagent l'index par défaut, ou définissez
155
+ explicitement `BASE_DIR` et `DB_PATH`.
129
156
 
130
157
  ## Contenu pris en charge
131
158
 
132
159
  | Entrée | Mode d'import |
133
160
  |---|---|
134
161
  | PDF, DOCX, TXT, Markdown | Import d'un fichier ou synchronisation d'un répertoire |
135
- | HTML déjà récupéré par le client | `ingest_data` ; nettoyé avec Readability puis converti en Markdown |
162
+ | HTML déjà récupéré par le client | `ingest_data` |
136
163
  | Texte brut ou Markdown en mémoire | `ingest_data` avec un identifiant de source stable |
137
164
 
138
- Le serveur ne récupère pas lui-même les pages HTML. Un client MCP peut charger une page et transmettre son HTML à `ingest_data`.
165
+ Le serveur ne récupère pas lui-même les pages HTML. Un client MCP peut charger une page et
166
+ transmettre son HTML à `ingest_data`.
167
+
168
+ L'import de fichiers ne prend pas en charge Excel, PowerPoint, les images seules ni les
169
+ extensions de code source. Les PDF peuvent éventuellement utiliser un modèle visuel local pour
170
+ décrire les figures, mais cette fonction n'est ni un OCR ni un moteur de recherche d'images.
171
+
172
+ ## Utiliser l'index
173
+
174
+ Synchronisez l'index après avoir ajouté, modifié ou supprimé des documents. Pour rechercher
175
+ puis lire le contexte d'un résultat, vous pouvez demander au client MCP :
139
176
 
140
- L'import de fichiers ne prend pas en charge Excel, PowerPoint, les images seules ni les extensions de code source. Les PDF peuvent éventuellement utiliser un modèle visuel local pour décrire les figures, mais cette fonction n'est ni un OCR ni un moteur de recherche d'images.
177
+ ```text
178
+ Cherche ce que dit la documentation sur ERR_CONNECTION_REFUSED.
179
+ Lis aussi les segments qui précèdent et suivent ce résultat.
180
+ ```
181
+
182
+ Vous pouvez aussi importer un fichier seul ou du HTML déjà récupéré par le client. Pour mettre
183
+ à jour une entrée existante, réimportez le document avec le même chemin ou le même identifiant
184
+ de source. `sync` ignore les fichiers inchangés. Les chemins de fichiers MCP doivent être
185
+ absolus et rester dans une racine configurée.
141
186
 
142
- ## Outils MCP
187
+ Les titres de section détectés dans un PDF peuvent être incorrects. Si vous avez besoin du
188
+ titre exact, vérifiez-le sur la page d'origine.
189
+
190
+ <details>
191
+ <summary>Outils MCP</summary>
143
192
 
144
193
  | Outil | Rôle |
145
194
  |---|---|
@@ -153,131 +202,143 @@ L'import de fichiers ne prend pas en charge Excel, PowerPoint, les images seules
153
202
  | `delete_file` | Supprimer un fichier indexé ou un élément `ingest_data` |
154
203
  | `status` | Afficher l'état de l'index et de la recherche |
155
204
 
156
- ### Synchroniser une racine documentaire
157
-
158
- `sync_start` importe les fichiers nouveaux ou modifiés, ignore ceux qui sont identiques octet par octet et retire de l'index les fichiers qui n'existent plus :
159
-
160
- ```text
161
- Synchronise tout le contenu des racines documentaires configurées et attends la fin de l'opération.
162
- ```
163
-
164
- L'outil renvoie immédiatement un `jobId`. Le client doit interroger `sync_status` jusqu'à ce que son état passe à `succeeded` ou `failed`. Un PDF modifié conserve le profil visuel avec lequel il a été indexé ; un PDF sans profil enregistré reste en texte seul. `sync_start` ne peut pas changer le profil.
165
-
166
- Le processus serveur ne conserve qu'une tâche de synchronisation. Une nouvelle tâche remplace l'enregistrement d'une tâche terminée, et le redémarrage du serveur efface cet enregistrement.
167
-
168
- ### Importer un fichier
169
-
170
- `ingest_file` accepte les fichiers PDF, DOCX, TXT et Markdown. Les chemins transmis par MCP doivent être absolus et rester dans une racine documentaire configurée :
171
-
172
- ```text
173
- Importe le document /Users/me/docs/api-spec.pdf.
174
- ```
175
-
176
- Réimporter le même chemin remplace les segments existants.
177
-
178
- ### Rechercher et lire davantage de contexte
205
+ </details>
179
206
 
180
- ```text
181
- Que dit la documentation de l'API au sujet de l'authentification ?
182
- Trouve le comportement documenté de ERR_CONNECTION_REFUSED.
183
- ```
207
+ ## CLI
184
208
 
185
- Les résultats contiennent le texte, le chemin source, le titre, l'indice du segment et le score de pertinence. Pour obtenir plus de contexte, transmettez à `read_chunk_neighbors` le `chunkIndex` et le `filePath` ou la `source` du résultat :
209
+ La CLI permet de mettre à jour l'index, de cibler la recherche ou de retirer du contenu indexé
210
+ :
186
211
 
187
- ```text
188
- Lis les segments voisins de ce résultat sur l'authentification.
212
+ ```bash
213
+ npx mcp-local-rag sync ./docs/
214
+ npx mcp-local-rag query "authentification" --scope /docs/api --scope /docs/guide
215
+ npx mcp-local-rag read-neighbors --file-path /abs/path.md --chunk-index 5
216
+ npx mcp-local-rag list
217
+ npx mcp-local-rag status
218
+ npx mcp-local-rag delete ./docs/old.pdf
219
+ npx mcp-local-rag delete --source "https://example.com/docs"
189
220
  ```
190
221
 
191
- `query_documents` et `list_files` acceptent un préfixe de chemin absolu facultatif dans `scope`, ou une liste de préfixes. Un préfixe correspond au chemin exact et à tous ses descendants.
192
-
193
- ### Importer du HTML
222
+ `ingest` importe les fichiers sélectionnés ; `sync` retire aussi de l'index les fichiers
223
+ supprimés et ignore ceux qui n'ont pas changé. Utilisez `--scope` pour limiter les résultats à
224
+ un préfixe de chemin et répétez cette option pour inclure plusieurs préfixes.
194
225
 
195
- Utilisez `ingest_data` après que le client MCP a récupéré la page :
226
+ Les options globales comme `--db-path`, `--cache-dir` et `--model-name` précèdent la
227
+ sous-commande. Les options propres à la sous-commande viennent ensuite :
196
228
 
197
- ```text
198
- Récupère https://example.com/docs et importe le HTML.
229
+ ```bash
230
+ npx mcp-local-rag --db-path ./my-db query "authentification"
199
231
  ```
200
232
 
201
- Le serveur extrait l'article principal, le convertit en Markdown et l'enregistre sous l'identifiant de source fourni. Réutiliser la même source met à jour le contenu existant.
202
-
203
- Respectez les conditions du site source et les droits d'auteur lors de l'indexation de contenu externe.
204
-
205
- ### Figures dans les PDF
233
+ Exécutez `npx mcp-local-rag --help` pour afficher la référence complète des commandes.
206
234
 
207
- Le mode visuel ajoute une description générée aux pages PDF riches en figures. Il est facultatif et ne charge aucun modèle visuel pendant un import normal.
235
+ `query` écrit ses résultats sur stdout au format JSON, la meilleure correspondance en premier,
236
+ ce qui permet de les rediriger vers un autre outil. La définition de chaque champ se trouve
237
+ dans [`docs/schema/query-output.schema.json`](docs/schema/query-output.schema.json).
208
238
 
209
- ```text
210
- Importe /Users/me/docs/research-paper.pdf avec visual: true.
211
- ```
239
+ Pour déplacer un projet tout en conservant son index, arrêtez le serveur MCP et les autres
240
+ processus d'écriture. Déplacez les fichiers et la base de données ensemble, sans modifier
241
+ l'arborescence, puis exécutez :
212
242
 
213
243
  ```bash
214
- npx mcp-local-rag ingest ./docs/research-paper.pdf --visual
244
+ npx mcp-local-rag --db-path /new/project/lancedb relocate --from /old/project --to /new/project
215
245
  ```
216
246
 
217
- | Profil | Cache du modèle | Usage |
218
- |---|---:|---|
219
- | `fast` (par défaut) | environ 250 Mo | Indexation visuelle légère |
220
- | `quality` | environ 1,7 Go | Figures contenant des libellés, des annotations ou d'autres textes intégrés à l'image |
221
-
222
- Sélectionnez le modèle le plus volumineux avec `visualQuality: "quality"` via MCP ou `--visual-quality quality` via la CLI. Lors des mesures sur CPU, l'inférence a pris environ trois fois plus de temps qu'avec `fast`, mais le résultat dépend du matériel et des mises à jour du modèle.
247
+ Mettez à jour `BASE_DIR`/`BASE_DIRS`, `DB_PATH` et les autres chemins concernés dans la
248
+ configuration MCP, puis redémarrez le client.
223
249
 
224
- #### Mettre à jour les descriptions `quality` existantes
250
+ ## Agent Skills
225
251
 
226
- À partir de 0.18.4, `quality` utilise Qwen3.5-2B ; les versions précédentes utilisaient Qwen2.5-VL-3B. Les descriptions déjà indexées conservent le texte produit par l'ancien modèle et `sync` ne les régénère pas : réimportez les fichiers dont vous souhaitez actualiser les descriptions.
252
+ Les [Agent Skills](https://agentskills.io/) donnent aux assistants IA des consignes pour les
253
+ requêtes et les imports :
227
254
 
228
255
  ```bash
229
- npx mcp-local-rag ingest ./docs/research-paper.pdf --visual --visual-quality quality
256
+ npx mcp-local-rag skills install --claude-code
257
+ npx mcp-local-rag skills install --claude-code --global
258
+ npx mcp-local-rag skills install --codex
230
259
  ```
231
260
 
232
- Ajoutez `--images` si le fichier a été importé avec cette option, car une exécution sans elle remplace les images stockées. L'ancien modèle reste sur le disque. Lorsque plus rien ne l'utilise, supprimez `onnx-community/Qwen2.5-VL-3B-Instruct-ONNX/` du répertoire de cache des modèles : `<cache-dir>`, dont la valeur par défaut est `./models/`.
261
+ Les skills installées couvrent la formulation des requêtes, l'affinage des résultats et
262
+ l'import de HTML. Si une skill ne s'active pas automatiquement, demandez explicitement à
263
+ l'assistant d'utiliser la skill mcp-local-rag.
233
264
 
234
- #### Mode visuel au fil des synchronisations
265
+ ## Options avancées
235
266
 
236
- Le profil avec lequel un PDF a été indexé est enregistré et `sync` le réutilise : un PDF indexé avec `fast` ou `quality` est réimporté avec ce même profil, et un PDF sans profil enregistré est importé en texte.
267
+ Commencez avec les réglages par défaut. Consultez les sections suivantes pour utiliser
268
+ plusieurs racines documentaires, adapter la recherche à vos documents ou rendre les figures PDF
269
+ recherchables.
237
270
 
238
- ```bash
239
- npx mcp-local-rag sync ./docs/ # conserver le profil enregistré de chaque PDF
240
- npx mcp-local-rag sync ./docs/ --visual # demander fast pour tous les PDF concernés
241
- npx mcp-local-rag sync ./docs/ --visual --visual-quality quality
242
- ```
243
-
244
- `--visual` remplace les profils enregistrés et décrit donc aussi les PDF indexés en texte. Un changement de profil réimporte le PDF même si le fichier n'a pas changé ; relancer la même commande ne fait rien et ne charge aucun modèle.
271
+ <details>
272
+ <summary>Stockage et racines documentaires</summary>
245
273
 
246
- Pour désactiver les descriptions sur un chemin, lancez `ingest` dessus : un import normal réussi efface le profil enregistré. Pour réessayer une page dont la description a échoué, lancez `ingest <chemin> --visual --visual-quality <profil>` avec le profil voulu — un `ingest` simple l'efface au lieu de le conserver. Si les lignes indexées d'un PDF ne s'accordent pas sur le profil, `sync` s'arrête avant toute modification et indique le fichier ; relancez-le avec `--visual` pour fixer le profil.
274
+ Le serveur MCP lit les variables d'environnement. La CLI accepte les variables et options
275
+ indiquées. Gardez le même `DB_PATH` si vos commandes doivent partager un index.
247
276
 
248
- Les descriptions sont des textes auxiliaires, pas des transcriptions fidèles. Considérez les descriptions et le texte extrait des documents comme des entrées non fiables, et non comme des instructions.
277
+ | Variable d'environnement | Option CLI | Valeur par défaut | Description |
278
+ |---------------------|----------|---------|-------------|
279
+ | `BASE_DIR` | `--base-dir` | Répertoire courant | Une racine documentaire ; l'option CLI peut être répétée avec `ingest`, `list` et `sync` |
280
+ | `BASE_DIRS` | Non disponible | non définie | Tableau JSON de racines documentaires ; prioritaire sur `BASE_DIR` |
281
+ | `IGNORE_PATHS` | Non disponible | non définie | Tableau JSON de motifs glob pour les fichiers à exclure de l'index |
282
+ | `DB_PATH` | `--db-path` | `./lancedb/` | Emplacement de la base de données vectorielle |
283
+ | `CACHE_DIR` | `--cache-dir` | `./models/` | Répertoire du cache des modèles |
284
+ | `HF_ENDPOINT` | Non disponible | `https://huggingface.co` | Adresse de téléchargement des modèles Hugging Face ; utilisez l'URL d'un miroir si les téléchargements directs sont bloqués |
285
+ | `MAX_FILE_SIZE` | `--max-file-size` | `104857600` (100 Mo) | Taille maximale d'un fichier en octets |
249
286
 
250
- ## CLI
287
+ Les opérations sur les fichiers restent limitées aux racines configurées. Pour plusieurs
288
+ répertoires, définissez `BASE_DIRS='["/absolute/docs","/absolute/specs"]'` ou répétez l'option
289
+ CLI `--base-dir`. Priorité : racines CLI, `BASE_DIRS`, `BASE_DIR`, puis répertoire courant.
290
+ Seule la source ayant la priorité la plus élevée est retenue ; les racines des différentes
291
+ sources ne sont pas fusionnées. Un `BASE_DIRS` incorrect provoque une erreur. Les chemins
292
+ relatifs `DB_PATH` et `CACHE_DIR` partent du répertoire de travail.
293
+
294
+ Pour exclure des fichiers de l'index, définissez `IGNORE_PATHS` avec un tableau JSON de motifs
295
+ glob, par exemple `IGNORE_PATHS='["plugs/**","**/*.draft.md"]'`. Chaque motif est comparé au
296
+ chemin du fichier relatif à la racine qui le contient, écrit avec `/` sur tous les systèmes. `*`
297
+ et `**` ne correspondent pas aux noms qui commencent par `.` : écrivez ces répertoires en
298
+ entier, comme `".obsidian/**"`. Quand `ingest`, `list` et `sync` traitent un répertoire, ils
299
+ ignorent les fichiers correspondants, et `sync` retire de l'index ceux qui y figurent déjà. Un
300
+ `IGNORE_PATHS` incorrect provoque une erreur.
251
301
 
252
- La CLI utilise le même analyseur, le même générateur d'embeddings et le même stockage vectoriel sans client MCP :
302
+ </details>
253
303
 
254
- ```bash
255
- npx mcp-local-rag ingest ./docs/
256
- npx mcp-local-rag sync ./docs/
257
- npx mcp-local-rag query "API d'authentification"
258
- npx mcp-local-rag query "authentification" --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
- ```
304
+ <details>
305
+ <summary>Modèles et réglage de la recherche</summary>
265
306
 
266
- Les options globales comme `--db-path`, `--cache-dir` et `--model-name` précèdent la sous-commande. Les options propres à la sous-commande viennent ensuite :
307
+ Choisissez un modèle d'embeddings adapté à la langue et au domaine de vos documents. Comparez
308
+ les réglages avec vos questions habituelles et vérifiez les passages renvoyés. Choisissez un
309
+ modèle compatible avec le mean pooling et la normalisation L2, utilisés ici pour calculer les
310
+ embeddings.
267
311
 
268
- ```bash
269
- npx mcp-local-rag --db-path ./my-db query "authentification"
270
- ```
312
+ | Variable d'environnement | Option CLI | Valeur par défaut | Description |
313
+ |---------------------|----------|---------|-------------|
314
+ | `MODEL_NAME` | `--model-name` | `Xenova/all-MiniLM-L6-v2` | Modèle d'embeddings Hugging Face |
315
+ | `CHUNK_MIN_LENGTH` | `--chunk-min-length` | `50` | Longueur minimale d'un segment ordinaire en caractères (1–10000) ; un fragment issu d'un découpage destiné à respecter la limite de tokens du modèle peut être plus court |
316
+ | `EMBED_TITLE_PREFIX` | Non disponible | `false` | Ajoute le titre du document à l'entrée utilisée pour calculer l'embedding de chaque segment |
317
+ | `EMBED_HEADING_PREFIX` | Non disponible | `false` | Ajoute la hiérarchie des titres de section à l'entrée de chaque segment, si la limite de tokens le permet |
318
+ | `RAG_DEVICE` | Non disponible | `cpu` | Périphérique utilisé par ONNX Runtime |
319
+ | `RAG_DTYPE` | Non disponible | `fp32` | Type de données des embeddings transmis au modèle choisi |
271
320
 
272
- Exécutez `npx mcp-local-rag --help` pour afficher la référence complète des commandes.
321
+ Les deux options de préfixe sont désactivées par défaut (`false`) et indépendantes. Essayez
322
+ `EMBED_TITLE_PREFIX` lorsqu'un segment a besoin du sujet général du document, ou
323
+ `EMBED_HEADING_PREFIX` lorsqu'il lui manque le sujet de sa section. Les activer ensemble
324
+ n'améliore pas toujours les résultats. Elles modifient les embeddings, pas le texte renvoyé ni
325
+ l'index par mots-clés ; le contexte de section est omis si son ajout dépasse la limite
326
+ d'entrée.
273
327
 
274
- La CLI ne lit pas la configuration du client MCP. Définissez les mêmes variables d'environnement ou options si les deux interfaces doivent partager un index. En particulier, `MODEL_NAME` et l'option CLI `--model-name` doivent correspondre pour une base de données partagée.
328
+ Lors d'un changement de modèle d'embeddings, créez un nouvel index dans un autre `DB_PATH`. Les
329
+ vecteurs de modèles différents ne sont pas comparables, même s'ils ont la même dimension. Après
330
+ un changement de `RAG_DTYPE` ou d'option de préfixe, réimportez tous les documents indexés
331
+ avant de lancer une recherche. `sync` ignore les fichiers inchangés.
275
332
 
276
- `query` écrit ses résultats sur stdout au format JSON, la meilleure correspondance en premier, ce qui permet de les rediriger vers un autre outil. La définition de chaque champ se trouve dans [`docs/schema/query-output.schema.json`](docs/schema/query-output.schema.json).
333
+ La CLI ne lit pas la configuration du client MCP. Pour partager un index, utilisez le même
334
+ modèle, le même `RAG_DTYPE` et les mêmes réglages de préfixe lors de l'import et de la
335
+ recherche. Changer uniquement `RAG_DEVICE` ne nécessite pas de nouvel index.
277
336
 
278
- ## Réglage de la recherche
337
+ ### Réglage de la recherche
279
338
 
280
- Le renforcement par mots-clés est activé par défaut. Pour les corpus qui nécessitent une sélection plus stricte, vous pouvez aussi configurer le regroupement par écarts de pertinence ainsi que les filtres de distance et de fichiers. Les quatre s'appliquent aussi bien au serveur MCP qu'à `query` dans la CLI.
339
+ Les quatre premiers réglages du tableau s'appliquent à MCP et à la CLI. Pour donner plus de
340
+ poids aux termes exacts, essayez d'augmenter `RAG_HYBRID_WEIGHT` et comparez les résultats avec
341
+ vos propres questions. Le reclassement externe est réservé à MCP.
281
342
 
282
343
  | Variable | Valeur par défaut | Description |
283
344
  |----------|---------|-------------|
@@ -285,125 +346,88 @@ Le renforcement par mots-clés est activé par défaut. Pour les corpus qui néc
285
346
  | `RAG_GROUPING` | non définie | `similar` conserve le premier groupe de pertinence ; `related` en conserve jusqu'à deux et utilise les écarts importants de distance vectorielle comme limites. |
286
347
  | `RAG_MAX_DISTANCE` | non définie | Écarte les résultats peu pertinents, par exemple avec `0.5`. |
287
348
  | `RAG_MAX_FILES` | non définie | Limite les résultats aux N fichiers les mieux classés, par exemple `1` pour le meilleur fichier uniquement. |
288
- | `RAG_RERANK_CMD` | non définie | Serveur MCP uniquement : commande externe qui reclasse les résultats. Votre requête et le texte trouvé lui sont transmis. |
349
+ | `RAG_RERANK_CMD` | non définie | MCP uniquement : commande externe ; `{query}` transmet la requête et `{top}` le nombre de résultats demandé. |
289
350
  | `RAG_RERANK_TIMEOUT_MS` | `10000` | Délai maximal par reclassement, en millisecondes (100–600000). |
290
351
 
291
- Pour les spécifications d'API et les autres documents comportant de nombreux identifiants, un poids plus élevé des mots-clés peut améliorer le classement des termes exacts :
292
-
293
- ```json
294
- "env": {
295
- "RAG_HYBRID_WEIGHT": "0.7"
296
- }
297
- ```
298
-
299
- - `0.7` : reclassement des termes exacts légèrement plus fort que la valeur par défaut
300
- - `1.0` : renforcement maximal des mots-clés
301
-
302
352
  ### Reclassement externe (`RAG_RERANK_CMD`)
303
353
 
304
- Indiquez ici une commande et le serveur lui confie chaque liste de résultats à reclasser, avec votre requête et le texte des passages trouvés. Une commande qui appelle un service distant envoie tout cela hors de cette machine.
354
+ La commande reçoit les résultats et le texte trouvé sur l'entrée standard. Si elle appelle un
355
+ service distant, ce texte peut quitter votre machine.
305
356
 
306
- Donnez la commande et ses arguments séparés par des espaces. Ce doit être un exécutable : le serveur le lance sans shell, si bien qu'un script `.cmd` installé par npm ne démarre pas sous Windows.
357
+ Indiquez l'exécutable et le gabarit complet de ses arguments. Placez `{query}` et `{top}` là où
358
+ la commande attend la requête et le nombre de résultats. Les guillemets simples ou doubles
359
+ regroupent les chemins ou arguments contenant des espaces, et les barres obliques inverses
360
+ restent littérales. Le serveur lance l'exécutable sans shell, si bien qu'un script `.cmd`
361
+ installé par npm ne démarre pas sous Windows.
307
362
 
308
363
  ```json
309
- "env": {
310
- "RAG_RERANK_CMD": "/path/to/reranker",
311
- "RAG_RERANK_TIMEOUT_MS": "10000"
364
+ {
365
+ "env": {
366
+ "RAG_RERANK_CMD": "/path/to/reranker --query {query} --top {top}",
367
+ "RAG_RERANK_TIMEOUT_MS": "10000"
368
+ }
312
369
  }
313
370
  ```
314
371
 
315
- La commande reçoit chaque résultat dans la forme publiée à [`docs/schema/query-output.schema.json`](docs/schema/query-output.schema.json) et doit répondre dans cette même forme. À l'intérieur, elle décide de tout : ce qu'elle garde, comment elle l'ordonne et ce que dit le texte. Ce qu'elle renvoie est ce que vous voyez.
316
-
317
- Les résultats conservent leur ordre d'origine si la commande échoue, dépasse le délai ou répond avec autre chose que cette forme.
372
+ La commande doit lire et renvoyer les résultats au format défini par le [schéma de
373
+ sortie](docs/schema/query-output.schema.json). Elle peut supprimer ou reclasser des résultats
374
+ et modifier leur texte. Le serveur renvoie sa sortie.
318
375
 
319
- ## Fonctionnement
376
+ Les résultats conservent leur ordre d'origine si la commande échoue, dépasse le délai ou
377
+ renvoie une réponse qui ne respecte pas le schéma.
320
378
 
321
- Pendant l'import :
322
-
323
- 1. L'analyseur extrait le texte du format d'entrée.
324
- 2. Le découpage sémantique repère les changements de sujet et conserve les blocs de code Markdown.
325
- 3. Transformers.js crée les embeddings localement.
326
- 4. LanceDB stocke les segments, les métadonnées, les vecteurs et l'index de texte intégral.
379
+ </details>
327
380
 
328
- Pendant la recherche :
381
+ <details>
382
+ <summary>Figures PDF et images enregistrées</summary>
329
383
 
330
- 1. La requête est convertie en embedding avec le même modèle.
331
- 2. La recherche vectorielle récupère les segments sémantiquement proches.
332
- 3. Les filtres de distance et les groupes de pertinence facultatifs réduisent la liste des candidats lorsqu'ils sont configurés.
333
- 4. Les correspondances en texte intégral renforcent les termes exacts de la requête.
384
+ Par défaut, l'import indexe uniquement le texte. Pour rechercher aussi dans les figures PDF,
385
+ activez la génération locale de descriptions avec `visual: true` dans MCP ou `--visual` dans la
386
+ CLI. Ces descriptions ne sont ni de l'OCR ni des transcriptions exactes.
334
387
 
335
- ## Agent Skills
388
+ `fast` (par défaut) télécharge environ 250 Mo à la première utilisation. Choisissez `quality`
389
+ pour les étiquettes et le texte dans les figures ; ce profil télécharge environ 1,7 Go et
390
+ demande davantage de temps de traitement.
336
391
 
337
- Les [Agent Skills](https://agentskills.io/) donnent aux assistants IA des consignes pour les requêtes et les imports :
392
+ Sélectionnez le profil avec `visualQuality: "quality"` dans MCP ou `--visual-quality quality`
393
+ dans la CLI.
338
394
 
339
395
  ```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
396
+ npx mcp-local-rag ingest ./docs/paper.pdf --visual --visual-quality quality
343
397
  ```
344
398
 
345
- Les skills installées couvrent la formulation des requêtes, l'affinage des résultats et l'import de HTML. Si une skill ne s'active pas automatiquement, demandez explicitement à l'assistant d'utiliser la skill mcp-local-rag.
346
-
347
- ## Configuration
348
-
349
- Le serveur MCP lit les variables d'environnement. La CLI accepte les mêmes variables ainsi que les options du tableau ; les options de la CLI sont prioritaires.
350
-
351
- | Variable d'environnement | Option CLI | Valeur par défaut | Description |
352
- |---------------------|----------|---------|-------------|
353
- | `BASE_DIR` | `--base-dir` | Répertoire courant | Une racine documentaire ; l'option CLI peut être répétée avec `ingest`, `list` et `sync` |
354
- | `BASE_DIRS` | Non disponible | non définie | Tableau JSON de racines documentaires ; prioritaire sur `BASE_DIR` |
355
- | `DB_PATH` | `--db-path` | `./lancedb/` | Emplacement de la base de données vectorielle |
356
- | `CACHE_DIR` | `--cache-dir` | `./models/` | Répertoire du cache des modèles |
357
- | `HF_ENDPOINT` | Non disponible | `https://huggingface.co` | Adresse de téléchargement des modèles Hugging Face ; utilisez l'URL d'un miroir si les téléchargements directs sont bloqués |
358
- | `MODEL_NAME` | `--model-name` | `Xenova/all-MiniLM-L6-v2` | Modèle d'embeddings Hugging Face |
359
- | `MAX_FILE_SIZE` | `--max-file-size` | `104857600` (100 Mo) | Taille maximale d'un fichier en octets |
360
- | `CHUNK_MIN_LENGTH` | `--chunk-min-length` | `50` | Longueur minimale d'un segment ordinaire en caractères (1–10000) ; un fragment issu d'un découpage destiné à respecter la limite de tokens du modèle peut être plus court |
361
- | `RAG_DEVICE` | Non disponible | `cpu` | Périphérique utilisé par ONNX Runtime |
362
- | `RAG_DTYPE` | Non disponible | `fp32` | Type de données des embeddings transmis au modèle choisi |
363
-
364
- ### Racines documentaires (`BASE_DIR` et `BASE_DIRS`)
365
-
366
- mcp-local-rag n'autorise les opérations sur les fichiers qu'à l'intérieur des racines configurées. Pour en utiliser plusieurs, `BASE_DIRS` doit être un tableau JSON de chemins non vides :
367
-
368
- ```bash
369
- export BASE_DIRS='["/Users/me/Documents/work","/Users/me/Projects/specs"]'
370
- ```
371
-
372
- La configuration est résolue dans cet ordre :
373
-
374
- 1. Options CLI `--base-dir <path>` (répétables avec `ingest`, `list` et `sync`)
375
- 2. `BASE_DIRS`
376
- 3. `BASE_DIR`
377
- 4. Répertoire courant
378
-
379
- Chaque source remplace entièrement celle de priorité inférieure, au lieu de s'y ajouter. Une configuration `BASE_DIRS` incorrecte provoque une erreur sans revenir à `BASE_DIR` ni au répertoire courant. `status` reste disponible dans MCP afin que le client puisse signaler l'erreur de configuration.
399
+ Pour recevoir des images avec les passages correspondants, utilisez `STORE_IMAGES=true` dans
400
+ MCP ou `--images` avec les commandes CLI `ingest` et `sync`. Cette option est indépendante des
401
+ descriptions et prend en charge les figures et tableaux détectés dans les PDF ainsi que les
402
+ images PNG/JPEG prises en charge dans les DOCX.
380
403
 
381
404
  ```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
405
+ npx mcp-local-rag ingest ./docs/paper.pdf --images
386
406
  ```
387
407
 
388
- ### Stockage et modèles
408
+ La synchronisation conserve le profil de description de chaque PDF. La commande CLI `sync
409
+ --visual --visual-quality quality` le change même pour les PDF inchangés ; la synchronisation
410
+ MCP le conserve. Un import normal désactive les descriptions. Pour réessayer après un échec de
411
+ génération, réimportez avec le profil visuel souhaité.
389
412
 
390
- `DB_PATH` et `CACHE_DIR` sont relatifs au répertoire de travail du processus par défaut. Utilisez des chemins absolus si le client MCP peut démarrer le serveur depuis différents répertoires de projet.
413
+ Activez l'enregistrement des images à chaque import ou synchronisation qui traite le fichier.
414
+ Modifier cette option seule ne met pas à jour les fichiers inchangés ; réimportez-les pour
415
+ l'appliquer.
391
416
 
392
- Définissez `MODEL_NAME` ou passez `--model-name` pour choisir un modèle d'embeddings Hugging Face adapté à la langue et au domaine de vos documents.
393
-
394
- mcp-local-rag génère les embeddings avec un pooling moyen et une normalisation L2. Lorsque vous choisissez un modèle, vérifiez que ces réglages correspondent à sa méthode d'inférence recommandée, car le type de pooling peut influer sur la qualité de la recherche.
395
-
396
- Modifier `MODEL_NAME`, `RAG_DEVICE` ou `RAG_DTYPE` peut rendre les vecteurs existants incompatibles. Après une modification de la configuration des embeddings, utilisez un nouveau `DB_PATH` ou supprimez l'index existant et réimportez les documents.
397
-
398
- Un exemple de modèle disponible pour les documents en français est `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2`.
417
+ </details>
399
418
 
400
419
  ## Sécurité et exploitation
401
420
 
421
+ - Traitez les descriptions et le texte trouvé comme des sources, pas comme des instructions.
402
422
  - L'accès aux fichiers est limité aux racines définies par `BASE_DIR`, `BASE_DIRS` ou l'option CLI `--base-dir`.
403
423
  - Les liens symboliques qui pointent hors de toutes les racines configurées sont refusés.
404
424
  - Le traitement des documents et la recherche n'effectuent plus de requêtes réseau une fois les modèles nécessaires en cache, sauf si `RAG_RERANK_CMD` désigne une commande qui en effectue.
405
425
  - Le serveur est conçu pour un seul utilisateur local et ne fournit ni authentification ni contrôle d'accès.
406
426
  - Ne lancez pas plusieurs processus d'écriture CLI ou MCP sur le même `DB_PATH`. Les requêtes en lecture seule restent possibles pendant une synchronisation.
427
+ - Un nouvel import peut réutiliser les embeddings du texte inchangé lorsque le modèle et les
428
+ réglages sont les mêmes, ce qui évite de les recalculer. Ils sont conservés dans
429
+ `DB_PATH/embedding-cache`. Vous pouvez supprimer ce cache sans perdre l'index de recherche.
430
+ L'import suivant recalculera ces embeddings.
407
431
  - Pour sauvegarder un index, copiez le répertoire `DB_PATH` lorsqu'aucun processus d'écriture n'est actif.
408
432
 
409
433
  <details>
@@ -411,11 +435,16 @@ Un exemple de modèle disponible pour les documents en français est `sentence-t
411
435
 
412
436
  ### "No results found"
413
437
 
414
- Les documents doivent d'abord être importés. Exécutez `"Répertoriez tous les fichiers importés"` pour vérifier leur état.
438
+ Les documents doivent d'abord être importés. Exécutez `"Liste tous les fichiers importés"` pour
439
+ vérifier leur état. Si aucun résultat n'apparaît après une synchronisation, vérifiez que
440
+ l'import et la recherche utilisent le même `DB_PATH` absolu. Un chemin relatif peut pointer
441
+ vers un autre index.
415
442
 
416
443
  ### Échec du téléchargement du modèle
417
444
 
418
- Vérifiez la connexion Internet. Si vous utilisez un proxy, contrôlez les paramètres réseau. Le modèle peut aussi être [téléchargé manuellement](https://huggingface.co/Xenova/all-MiniLM-L6-v2).
445
+ Vérifiez la connexion Internet. Si vous utilisez un proxy, contrôlez les paramètres réseau. Le
446
+ modèle peut aussi être [téléchargé
447
+ manuellement](https://huggingface.co/Xenova/all-MiniLM-L6-v2).
419
448
 
420
449
  ### "File too large"
421
450
 
@@ -423,11 +452,13 @@ La limite par défaut est de 100 Mo. Découpez le fichier ou augmentez `MAX_FILE
423
452
 
424
453
  ### Requêtes lentes
425
454
 
426
- Consultez le nombre de segments avec `status`. Les gros documents comportant de nombreux segments peuvent ralentir les requêtes. Envisagez de diviser les fichiers très volumineux.
455
+ Consultez le nombre de segments avec `status`. Les gros documents comportant de nombreux
456
+ segments peuvent ralentir les requêtes. Envisagez de diviser les fichiers très volumineux.
427
457
 
428
458
  ### "Path outside BASE_DIR"
429
459
 
430
- Le chemin doit se trouver dans l'une des racines configurées : `BASE_DIR`, une entrée de `BASE_DIRS` ou un chemin fourni avec `--base-dir` dans la CLI. Utilisez un chemin absolu.
460
+ Le chemin doit se trouver dans l'une des racines configurées : `BASE_DIR`, une entrée de
461
+ `BASE_DIRS` ou un chemin fourni avec `--base-dir` dans la CLI. Utilisez un chemin absolu.
431
462
 
432
463
  ### "BASE_DIRS must be a JSON array..."
433
464
 
@@ -447,7 +478,8 @@ Le chemin doit se trouver dans l'une des racines configurées : `BASE_DIR`, une
447
478
 
448
479
  ## Contribuer
449
480
 
450
- Les contributions sont les bienvenues. Consultez [CONTRIBUTING.md](CONTRIBUTING.md) pour préparer l'environnement et connaître les règles du projet.
481
+ Les contributions sont les bienvenues. Consultez [CONTRIBUTING.md](CONTRIBUTING.md) pour
482
+ préparer l'environnement et connaître les règles du projet.
451
483
 
452
484
  ## Licence
453
485
 
@@ -459,4 +491,6 @@ Licence MIT. Utilisation gratuite à des fins personnelles et commerciales.
459
491
 
460
492
  ## Remerciements
461
493
 
462
- Développé avec le [Model Context Protocol](https://modelcontextprotocol.io/) d'Anthropic, [LanceDB](https://lancedb.com/) et [Transformers.js](https://huggingface.co/docs/transformers.js).
494
+ Développé avec le [Model Context Protocol](https://modelcontextprotocol.io/) d'Anthropic,
495
+ [LanceDB](https://lancedb.com/) et
496
+ [Transformers.js](https://huggingface.co/docs/transformers.js).