abb-opencode-local-rag 0.1.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 (233) hide show
  1. package/LICENSE +21 -0
  2. package/README.de.md +416 -0
  3. package/README.es.md +416 -0
  4. package/README.fr.md +416 -0
  5. package/README.md +491 -0
  6. package/README.pt-BR.md +416 -0
  7. package/README.zh-CN.md +416 -0
  8. package/dist/bin/install-skills.d.ts +20 -0
  9. package/dist/bin/install-skills.d.ts.map +1 -0
  10. package/dist/bin/install-skills.js +195 -0
  11. package/dist/bin/install-skills.js.map +1 -0
  12. package/dist/chunker/index.d.ts +24 -0
  13. package/dist/chunker/index.d.ts.map +1 -0
  14. package/dist/chunker/index.js +2 -0
  15. package/dist/chunker/index.js.map +1 -0
  16. package/dist/chunker/semantic-chunker.d.ts +97 -0
  17. package/dist/chunker/semantic-chunker.d.ts.map +1 -0
  18. package/dist/chunker/semantic-chunker.js +294 -0
  19. package/dist/chunker/semantic-chunker.js.map +1 -0
  20. package/dist/chunker/sentence-splitter.d.ts +28 -0
  21. package/dist/chunker/sentence-splitter.d.ts.map +1 -0
  22. package/dist/chunker/sentence-splitter.js +219 -0
  23. package/dist/chunker/sentence-splitter.js.map +1 -0
  24. package/dist/cli/common.d.ts +65 -0
  25. package/dist/cli/common.d.ts.map +1 -0
  26. package/dist/cli/common.js +138 -0
  27. package/dist/cli/common.js.map +1 -0
  28. package/dist/cli/delete.d.ts +8 -0
  29. package/dist/cli/delete.d.ts.map +1 -0
  30. package/dist/cli/delete.js +173 -0
  31. package/dist/cli/delete.js.map +1 -0
  32. package/dist/cli/file-collection.d.ts +2 -0
  33. package/dist/cli/file-collection.d.ts.map +1 -0
  34. package/dist/cli/file-collection.js +53 -0
  35. package/dist/cli/file-collection.js.map +1 -0
  36. package/dist/cli/ingest.d.ts +100 -0
  37. package/dist/cli/ingest.d.ts.map +1 -0
  38. package/dist/cli/ingest.js +363 -0
  39. package/dist/cli/ingest.js.map +1 -0
  40. package/dist/cli/list.d.ts +35 -0
  41. package/dist/cli/list.d.ts.map +1 -0
  42. package/dist/cli/list.js +210 -0
  43. package/dist/cli/list.js.map +1 -0
  44. package/dist/cli/options.d.ts +100 -0
  45. package/dist/cli/options.d.ts.map +1 -0
  46. package/dist/cli/options.js +241 -0
  47. package/dist/cli/options.js.map +1 -0
  48. package/dist/cli/query.d.ts +24 -0
  49. package/dist/cli/query.d.ts.map +1 -0
  50. package/dist/cli/query.js +191 -0
  51. package/dist/cli/query.js.map +1 -0
  52. package/dist/cli/read-neighbors.d.ts +11 -0
  53. package/dist/cli/read-neighbors.d.ts.map +1 -0
  54. package/dist/cli/read-neighbors.js +224 -0
  55. package/dist/cli/read-neighbors.js.map +1 -0
  56. package/dist/cli/status.d.ts +8 -0
  57. package/dist/cli/status.d.ts.map +1 -0
  58. package/dist/cli/status.js +80 -0
  59. package/dist/cli/status.js.map +1 -0
  60. package/dist/cli/sync.d.ts +8 -0
  61. package/dist/cli/sync.d.ts.map +1 -0
  62. package/dist/cli/sync.js +244 -0
  63. package/dist/cli/sync.js.map +1 -0
  64. package/dist/cli-main.d.ts +12 -0
  65. package/dist/cli-main.d.ts.map +1 -0
  66. package/dist/cli-main.js +63 -0
  67. package/dist/cli-main.js.map +1 -0
  68. package/dist/embedder/index.d.ts +85 -0
  69. package/dist/embedder/index.d.ts.map +1 -0
  70. package/dist/embedder/index.js +284 -0
  71. package/dist/embedder/index.js.map +1 -0
  72. package/dist/features/list.d.ts +37 -0
  73. package/dist/features/list.d.ts.map +1 -0
  74. package/dist/features/list.js +40 -0
  75. package/dist/features/list.js.map +1 -0
  76. package/dist/features/sync.d.ts +207 -0
  77. package/dist/features/sync.d.ts.map +1 -0
  78. package/dist/features/sync.js +380 -0
  79. package/dist/features/sync.js.map +1 -0
  80. package/dist/index.d.ts +3 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +53 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/ingest/compute.d.ts +86 -0
  85. package/dist/ingest/compute.d.ts.map +1 -0
  86. package/dist/ingest/compute.js +177 -0
  87. package/dist/ingest/compute.js.map +1 -0
  88. package/dist/ingest/file.d.ts +27 -0
  89. package/dist/ingest/file.d.ts.map +1 -0
  90. package/dist/ingest/file.js +67 -0
  91. package/dist/ingest/file.js.map +1 -0
  92. package/dist/ingest/visual.d.ts +45 -0
  93. package/dist/ingest/visual.d.ts.map +1 -0
  94. package/dist/ingest/visual.js +234 -0
  95. package/dist/ingest/visual.js.map +1 -0
  96. package/dist/parser/docx-parser.d.ts +12 -0
  97. package/dist/parser/docx-parser.d.ts.map +1 -0
  98. package/dist/parser/docx-parser.js +328 -0
  99. package/dist/parser/docx-parser.js.map +1 -0
  100. package/dist/parser/html-parser.d.ts +18 -0
  101. package/dist/parser/html-parser.d.ts.map +1 -0
  102. package/dist/parser/html-parser.js +102 -0
  103. package/dist/parser/html-parser.js.map +1 -0
  104. package/dist/parser/index.d.ts +214 -0
  105. package/dist/parser/index.d.ts.map +1 -0
  106. package/dist/parser/index.js +454 -0
  107. package/dist/parser/index.js.map +1 -0
  108. package/dist/parser/pdf-extract.d.ts +81 -0
  109. package/dist/parser/pdf-extract.d.ts.map +1 -0
  110. package/dist/parser/pdf-extract.js +112 -0
  111. package/dist/parser/pdf-extract.js.map +1 -0
  112. package/dist/parser/pdf-filter.d.ts +117 -0
  113. package/dist/parser/pdf-filter.d.ts.map +1 -0
  114. package/dist/parser/pdf-filter.js +528 -0
  115. package/dist/parser/pdf-filter.js.map +1 -0
  116. package/dist/parser/title-extractor.d.ts +69 -0
  117. package/dist/parser/title-extractor.d.ts.map +1 -0
  118. package/dist/parser/title-extractor.js +145 -0
  119. package/dist/parser/title-extractor.js.map +1 -0
  120. package/dist/pdf-visual/captioner.d.ts +16 -0
  121. package/dist/pdf-visual/captioner.d.ts.map +1 -0
  122. package/dist/pdf-visual/captioner.js +63 -0
  123. package/dist/pdf-visual/captioner.js.map +1 -0
  124. package/dist/pdf-visual/captioners/fast.d.ts +7 -0
  125. package/dist/pdf-visual/captioners/fast.d.ts.map +1 -0
  126. package/dist/pdf-visual/captioners/fast.js +103 -0
  127. package/dist/pdf-visual/captioners/fast.js.map +1 -0
  128. package/dist/pdf-visual/captioners/quality.d.ts +7 -0
  129. package/dist/pdf-visual/captioners/quality.d.ts.map +1 -0
  130. package/dist/pdf-visual/captioners/quality.js +127 -0
  131. package/dist/pdf-visual/captioners/quality.js.map +1 -0
  132. package/dist/pdf-visual/captioners/shared.d.ts +44 -0
  133. package/dist/pdf-visual/captioners/shared.d.ts.map +1 -0
  134. package/dist/pdf-visual/captioners/shared.js +104 -0
  135. package/dist/pdf-visual/captioners/shared.js.map +1 -0
  136. package/dist/pdf-visual/detector.d.ts +9 -0
  137. package/dist/pdf-visual/detector.d.ts.map +1 -0
  138. package/dist/pdf-visual/detector.js +234 -0
  139. package/dist/pdf-visual/detector.js.map +1 -0
  140. package/dist/pdf-visual/index.d.ts +13 -0
  141. package/dist/pdf-visual/index.d.ts.map +1 -0
  142. package/dist/pdf-visual/index.js +45 -0
  143. package/dist/pdf-visual/index.js.map +1 -0
  144. package/dist/pdf-visual/renderer.d.ts +9 -0
  145. package/dist/pdf-visual/renderer.d.ts.map +1 -0
  146. package/dist/pdf-visual/renderer.js +177 -0
  147. package/dist/pdf-visual/renderer.js.map +1 -0
  148. package/dist/pdf-visual/types.d.ts +62 -0
  149. package/dist/pdf-visual/types.d.ts.map +1 -0
  150. package/dist/pdf-visual/types.js +32 -0
  151. package/dist/pdf-visual/types.js.map +1 -0
  152. package/dist/server/error-utils.d.ts +79 -0
  153. package/dist/server/error-utils.d.ts.map +1 -0
  154. package/dist/server/error-utils.js +148 -0
  155. package/dist/server/error-utils.js.map +1 -0
  156. package/dist/server/index.d.ts +258 -0
  157. package/dist/server/index.d.ts.map +1 -0
  158. package/dist/server/index.js +1104 -0
  159. package/dist/server/index.js.map +1 -0
  160. package/dist/server/list-scanner.d.ts +52 -0
  161. package/dist/server/list-scanner.d.ts.map +1 -0
  162. package/dist/server/list-scanner.js +72 -0
  163. package/dist/server/list-scanner.js.map +1 -0
  164. package/dist/server/tool-definitions.d.ts +8 -0
  165. package/dist/server/tool-definitions.d.ts.map +1 -0
  166. package/dist/server/tool-definitions.js +181 -0
  167. package/dist/server/tool-definitions.js.map +1 -0
  168. package/dist/server/tool-input.d.ts +37 -0
  169. package/dist/server/tool-input.d.ts.map +1 -0
  170. package/dist/server/tool-input.js +216 -0
  171. package/dist/server/tool-input.js.map +1 -0
  172. package/dist/server/types.d.ts +331 -0
  173. package/dist/server/types.d.ts.map +1 -0
  174. package/dist/server/types.js +3 -0
  175. package/dist/server/types.js.map +1 -0
  176. package/dist/server-main.d.ts +46 -0
  177. package/dist/server-main.d.ts.map +1 -0
  178. package/dist/server-main.js +242 -0
  179. package/dist/server-main.js.map +1 -0
  180. package/dist/utils/base-dirs.d.ts +212 -0
  181. package/dist/utils/base-dirs.d.ts.map +1 -0
  182. package/dist/utils/base-dirs.js +422 -0
  183. package/dist/utils/base-dirs.js.map +1 -0
  184. package/dist/utils/errors.d.ts +24 -0
  185. package/dist/utils/errors.d.ts.map +1 -0
  186. package/dist/utils/errors.js +53 -0
  187. package/dist/utils/errors.js.map +1 -0
  188. package/dist/utils/limits.d.ts +26 -0
  189. package/dist/utils/limits.d.ts.map +1 -0
  190. package/dist/utils/limits.js +28 -0
  191. package/dist/utils/limits.js.map +1 -0
  192. package/dist/utils/list-sources.d.ts +47 -0
  193. package/dist/utils/list-sources.d.ts.map +1 -0
  194. package/dist/utils/list-sources.js +50 -0
  195. package/dist/utils/list-sources.js.map +1 -0
  196. package/dist/utils/raw-data-utils.d.ts +131 -0
  197. package/dist/utils/raw-data-utils.d.ts.map +1 -0
  198. package/dist/utils/raw-data-utils.js +255 -0
  199. package/dist/utils/raw-data-utils.js.map +1 -0
  200. package/dist/utils/scan.d.ts +126 -0
  201. package/dist/utils/scan.d.ts.map +1 -0
  202. package/dist/utils/scan.js +221 -0
  203. package/dist/utils/scan.js.map +1 -0
  204. package/dist/utils/scope-match.d.ts +43 -0
  205. package/dist/utils/scope-match.d.ts.map +1 -0
  206. package/dist/utils/scope-match.js +87 -0
  207. package/dist/utils/scope-match.js.map +1 -0
  208. package/dist/utils/sensitive-path.d.ts +23 -0
  209. package/dist/utils/sensitive-path.d.ts.map +1 -0
  210. package/dist/utils/sensitive-path.js +91 -0
  211. package/dist/utils/sensitive-path.js.map +1 -0
  212. package/dist/utils/sync-path-key.d.ts +20 -0
  213. package/dist/utils/sync-path-key.d.ts.map +1 -0
  214. package/dist/utils/sync-path-key.js +33 -0
  215. package/dist/utils/sync-path-key.js.map +1 -0
  216. package/dist/vectordb/index.d.ts +168 -0
  217. package/dist/vectordb/index.d.ts.map +1 -0
  218. package/dist/vectordb/index.js +619 -0
  219. package/dist/vectordb/index.js.map +1 -0
  220. package/dist/vectordb/search-filters.d.ts +39 -0
  221. package/dist/vectordb/search-filters.d.ts.map +1 -0
  222. package/dist/vectordb/search-filters.js +136 -0
  223. package/dist/vectordb/search-filters.js.map +1 -0
  224. package/dist/vectordb/types.d.ts +196 -0
  225. package/dist/vectordb/types.d.ts.map +1 -0
  226. package/dist/vectordb/types.js +224 -0
  227. package/dist/vectordb/types.js.map +1 -0
  228. package/package.json +105 -0
  229. package/skills/mcp-local-rag/SKILL.md +308 -0
  230. package/skills/mcp-local-rag/references/cli-reference.md +175 -0
  231. package/skills/mcp-local-rag/references/html-ingestion.md +78 -0
  232. package/skills/mcp-local-rag/references/query-optimization.md +57 -0
  233. package/skills/mcp-local-rag/references/result-refinement.md +56 -0
package/README.es.md ADDED
@@ -0,0 +1,416 @@
1
+ <p align="center">
2
+ <img src="assets/banner.jpg" alt="MCP Local RAG: Search below the surface." width="600" />
3
+ </p>
4
+
5
+ # MCP Local RAG
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/)
11
+
12
+ <p align="center">
13
+ <a href="README.md">English</a> |
14
+ <a href="README.zh-CN.md">简体中文</a> |
15
+ <a href="README.de.md">Deutsch</a> |
16
+ <strong>Español</strong> |
17
+ <a href="README.pt-BR.md">Português (Brasil)</a> |
18
+ <a href="README.fr.md">Français</a>
19
+ </p>
20
+
21
+ Busca en documentos privados desde un cliente MCP o desde la terminal sin enviarlos a una API de embeddings.
22
+
23
+ mcp-local-rag indexa archivos PDF, DOCX y Markdown, además de archivos de texto, en tu equipo. La búsqueda combina similitud semántica y coincidencia de palabras clave. Así tiene en cuenta tanto el sentido de la consulta como los términos técnicos exactos, por ejemplo nombres de API, clases y códigos de error.
24
+
25
+ ## Funciones
26
+
27
+ - **Ejecución local:** El análisis de documentos, los embeddings, el almacenamiento y la búsqueda se realizan en tu equipo. Después de descargar el modelo por primera vez, la incorporación de texto y las búsquedas funcionan sin conexión.
28
+ - **Búsqueda híbrida:** La recuperación semántica encuentra conceptos relacionados y la coincidencia de palabras clave da más peso a los términos técnicos exactos.
29
+ - **Embeddings configurables:** Puedes elegir un modelo de embeddings de Hugging Face adecuado para el idioma y el ámbito de tus documentos.
30
+ - **Segmentación semántica:** Los documentos se dividen cuando cambia el tema, no cada cierto número de caracteres. Los bloques de código Markdown se mantienen intactos.
31
+ - **MCP y CLI:** Usa el mismo índice desde una herramienta de programación con IA o directamente desde la terminal.
32
+
33
+ No hace falta una clave de API, Docker, Python ni una base de datos externa.
34
+
35
+ ## Inicio rápido
36
+
37
+ ### Requisitos
38
+
39
+ - Node.js 22 o posterior
40
+ - Acceso a Internet durante el primer uso para descargar el paquete npm y el modelo de embeddings
41
+ - Un directorio con los documentos que quieras consultar
42
+
43
+ Asigna ese directorio a `BASE_DIR`. También será el límite de seguridad para las operaciones con archivos. Sustituye `/absolute/path/to/your/documents` en los ejemplos por la ruta absoluta del directorio.
44
+
45
+ mcp-local-rag usa el protocolo MCP estándar mediante un servidor stdio local. Por eso funciona con herramientas de programación con IA y otros hosts MCP que admitan servidores MCP locales.
46
+
47
+ Usa uno de los ejemplos siguientes o registra `npx -y mcp-local-rag` y configura `BASE_DIR` con el formato de configuración MCP de tu cliente.
48
+
49
+ **Claude Code:** Ejecuta este comando:
50
+
51
+ ```bash
52
+ claude mcp add local-rag --scope user --env BASE_DIR=/absolute/path/to/your/documents -- npx -y mcp-local-rag
53
+ ```
54
+
55
+ **Codex:** Añade lo siguiente a `~/.codex/config.toml`:
56
+
57
+ ```toml
58
+ [mcp_servers.local-rag]
59
+ command = "npx"
60
+ args = ["-y", "mcp-local-rag"]
61
+
62
+ [mcp_servers.local-rag.env]
63
+ BASE_DIR = "/absolute/path/to/your/documents"
64
+ ```
65
+
66
+ **OpenCode:** Añade lo siguiente a `~/.config/opencode/opencode.json` (o `opencode.jsonc`):
67
+
68
+ ```json
69
+ {
70
+ "$schema": "https://opencode.ai/config.json",
71
+ "mcp": {
72
+ "local-rag": {
73
+ "type": "local",
74
+ "command": ["npx", "-y", "mcp-local-rag"],
75
+ "environment": {
76
+ "BASE_DIR": "/absolute/path/to/your/documents"
77
+ }
78
+ }
79
+ }
80
+ }
81
+ ```
82
+
83
+ **Cursor:** Añade lo siguiente a `~/.cursor/mcp.json`:
84
+
85
+ ```json
86
+ {
87
+ "mcpServers": {
88
+ "local-rag": {
89
+ "command": "npx",
90
+ "args": ["-y", "mcp-local-rag"],
91
+ "env": {
92
+ "BASE_DIR": "/absolute/path/to/your/documents"
93
+ }
94
+ }
95
+ }
96
+ }
97
+ ```
98
+
99
+ Reinicia el cliente y pídele que construya el índice:
100
+
101
+ ```text
102
+ Sincroniza todos los documentos del directorio raíz configurado y espera a que termine.
103
+ ```
104
+
105
+ La primera sincronización descarga el modelo de embeddings predeterminado (unos 90 MB). Pueden pasar entre 1 y 2 minutos antes de que comience la incorporación. Las ejecuciones posteriores usan la caché local.
106
+
107
+ Cuando termine la sincronización, prueba con una consulta:
108
+
109
+ ```text
110
+ ¿Qué dice la documentación de la API sobre la autenticación?
111
+ ```
112
+
113
+ ### Inicio rápido con la CLI
114
+
115
+ Para usar la CLI sin un cliente MCP:
116
+
117
+ ```bash
118
+ npx mcp-local-rag ingest ./docs/
119
+ npx mcp-local-rag query "API de autenticación"
120
+ ```
121
+
122
+ La CLI usa el directorio actual como raíz de documentos de forma predeterminada. Ejecuta ambos comandos desde el mismo directorio para que compartan el índice predeterminado, o configura `BASE_DIR` y `DB_PATH` de forma explícita.
123
+
124
+ ## Por qué existe
125
+
126
+ Algunos conjuntos de documentos no se pueden enviar a un servicio de embeddings alojado por motivos de confidencialidad o por las políticas de una organización. Un índice local permite consultarlos sin añadir un coste de API por búsqueda.
127
+
128
+ Una búsqueda puramente semántica puede pasar por alto identificadores exactos que son importantes en la documentación técnica. El reajuste por palabras clave mantiene visibles esos términos sin renunciar a las consultas en lenguaje natural.
129
+
130
+ ## Contenido compatible
131
+
132
+ | Entrada | Cómo incorporarla |
133
+ |---|---|
134
+ | PDF, DOCX, TXT, Markdown | Incorporación de archivos o sincronización de directorios |
135
+ | HTML ya obtenido por el cliente | `ingest_data`; se limpia con Readability y se convierte a Markdown |
136
+ | Texto sin formato o Markdown en memoria | `ingest_data` con un identificador de origen estable |
137
+
138
+ El servidor no descarga páginas HTML. Un cliente MCP puede obtener una página y pasar su HTML a `ingest_data`.
139
+
140
+ La incorporación de archivos no admite Excel, PowerPoint, imágenes independientes ni extensiones de código fuente. De forma opcional, los PDF pueden usar un modelo visual local para describir figuras, pero esta función no es OCR ni búsqueda de imágenes.
141
+
142
+ ## Herramientas MCP
143
+
144
+ | Herramienta | Función |
145
+ |---|---|
146
+ | `sync_start` | Sincronizar el índice con todos los directorios raíz configurados o con una ruta |
147
+ | `sync_status` | Consultar una sincronización en curso |
148
+ | `ingest_file` | Incorporar o sustituir un archivo |
149
+ | `ingest_data` | Incorporar texto, Markdown o HTML que ya esté disponible en el cliente |
150
+ | `query_documents` | Buscar mediante coincidencia semántica y refuerzo de palabras clave |
151
+ | `read_chunk_neighbors` | Leer los segmentos contiguos a un resultado de búsqueda |
152
+ | `list_files` | Mostrar los archivos compatibles y su estado de incorporación |
153
+ | `delete_file` | Eliminar un archivo indexado o un elemento de `ingest_data` |
154
+ | `status` | Mostrar el estado del índice y de la búsqueda |
155
+
156
+ ### Sincronizar un directorio raíz
157
+
158
+ `sync_start` incorpora archivos nuevos o modificados, omite los que son idénticos byte a byte y elimina del índice los archivos que ya no existen:
159
+
160
+ ```text
161
+ Sincroniza todo el contenido de los directorios raíz configurados y espera a que termine.
162
+ ```
163
+
164
+ La herramienta devuelve un `jobId` de inmediato. El cliente debe consultar `sync_status` hasta que el estado sea `succeeded` o `failed`. Durante la sincronización no hay modo visual; los PDF modificados se incorporan como texto.
165
+
166
+ El proceso del servidor solo conserva un trabajo de sincronización. Un trabajo nuevo sustituye el registro de uno ya terminado y el registro se pierde al reiniciar el servidor.
167
+
168
+ ### Incorporar un archivo
169
+
170
+ `ingest_file` admite PDF, DOCX, TXT y Markdown. Las rutas de archivo enviadas mediante MCP deben ser absolutas y estar dentro de un directorio raíz configurado:
171
+
172
+ ```text
173
+ Incorpora el documento /Users/me/docs/api-spec.pdf.
174
+ ```
175
+
176
+ Si se vuelve a incorporar la misma ruta, sus segmentos anteriores se sustituyen.
177
+
178
+ ### Buscar y leer más contexto
179
+
180
+ ```text
181
+ ¿Qué dice la documentación de la API sobre la autenticación?
182
+ Busca el comportamiento documentado de ERR_CONNECTION_REFUSED.
183
+ ```
184
+
185
+ Los resultados contienen el texto, la ruta de origen, el título, el índice del segmento y la puntuación de relevancia. Si necesitas más contexto, pasa a `read_chunk_neighbors` el `chunkIndex` y el `filePath` o `source` del resultado:
186
+
187
+ ```text
188
+ Lee los segmentos contiguos a ese resultado sobre autenticación.
189
+ ```
190
+
191
+ Tanto `query_documents` como `list_files` aceptan un prefijo de ruta absoluto opcional en `scope`, o una lista de prefijos. Cada prefijo coincide con la ruta exacta y con todo lo que contiene.
192
+
193
+ ### Incorporar HTML
194
+
195
+ Usa `ingest_data` después de que el cliente MCP haya obtenido la página:
196
+
197
+ ```text
198
+ Obtén https://example.com/docs e incorpora el HTML.
199
+ ```
200
+
201
+ El servidor extrae el artículo principal, lo convierte a Markdown y lo guarda con el identificador de origen indicado. Si se reutiliza el mismo origen, se actualiza el contenido existente.
202
+
203
+ Respeta las condiciones y los derechos de autor del sitio de origen al indexar contenido externo.
204
+
205
+ ### Figuras de PDF
206
+
207
+ El modo visual añade una descripción generada a las páginas de un PDF que contienen muchas figuras. Es opcional y no carga ningún modelo visual durante una incorporación normal.
208
+
209
+ ```text
210
+ Incorpora /Users/me/docs/research-paper.pdf con visual: true.
211
+ ```
212
+
213
+ ```bash
214
+ npx mcp-local-rag ingest ./docs/research-paper.pdf --visual
215
+ ```
216
+
217
+ | Perfil | Caché del modelo | Uso |
218
+ |---|---:|---|
219
+ | `fast` (predeterminado) | unos 250 MB | Indexación visual ligera |
220
+ | `quality` | unos 2,9 GB | Figuras con etiquetas, anotaciones u otro texto dentro de la imagen |
221
+
222
+ Selecciona el modelo más grande con `visualQuality: "quality"` en MCP o con `--visual-quality quality` en la CLI. En pruebas con CPU, la inferencia tardó aproximadamente el doble que con `fast`, aunque el resultado depende del hardware y de las actualizaciones del modelo.
223
+
224
+ Las descripciones son texto auxiliar, no transcripciones fieles. Trata las descripciones y el texto recuperado de los documentos como entradas no fiables, no como instrucciones.
225
+
226
+ ## CLI
227
+
228
+ La CLI usa el mismo analizador, generador de embeddings y almacén vectorial sin necesidad de un cliente MCP:
229
+
230
+ ```bash
231
+ npx mcp-local-rag ingest ./docs/
232
+ npx mcp-local-rag sync ./docs/
233
+ npx mcp-local-rag query "API de autenticación"
234
+ npx mcp-local-rag query "autenticación" --scope /docs/api --scope /docs/guide
235
+ npx mcp-local-rag read-neighbors --file-path /abs/path.md --chunk-index 5
236
+ npx mcp-local-rag list
237
+ npx mcp-local-rag status
238
+ npx mcp-local-rag delete ./docs/old.pdf
239
+ npx mcp-local-rag delete --source "https://example.com/docs"
240
+ ```
241
+
242
+ Las opciones globales, como `--db-path`, `--cache-dir` y `--model-name`, van antes del subcomando. Las opciones propias del subcomando van después:
243
+
244
+ ```bash
245
+ npx mcp-local-rag --db-path ./my-db query "autenticación"
246
+ ```
247
+
248
+ Ejecuta `npx mcp-local-rag --help` para ver la referencia completa de comandos.
249
+
250
+ La CLI no lee la configuración del cliente MCP. Configura las mismas variables de entorno u opciones si ambas interfaces deben compartir un índice. En particular, `MODEL_NAME` y la opción `--model-name` de la CLI deben coincidir cuando usan la misma base de datos.
251
+
252
+ ## Ajuste de la búsqueda
253
+
254
+ El refuerzo de palabras clave está activado de forma predeterminada. Para corpus que necesiten una selección más estricta, también se pueden configurar la agrupación por saltos de relevancia y los filtros de distancia y de archivos.
255
+
256
+ | Variable | Valor predeterminado | Descripción |
257
+ |----------|---------|-------------|
258
+ | `RAG_HYBRID_WEIGHT` | `0.6` | Factor de refuerzo de palabras clave (0.0–1.0). 0 desactiva el reajuste por palabras clave y 1 aplica el refuerzo máximo. |
259
+ | `RAG_GROUPING` | sin configurar | `similar` conserva el primer grupo de relevancia; `related` conserva hasta dos y usa saltos importantes de distancia vectorial como límites. |
260
+ | `RAG_MAX_DISTANCE` | sin configurar | Descarta resultados poco relevantes (por ejemplo, `0.5`). |
261
+ | `RAG_MAX_FILES` | sin configurar | Limita los resultados a los N archivos mejor clasificados (por ejemplo, `1` deja solo el mejor archivo). |
262
+
263
+ En especificaciones de API y otros documentos con muchos identificadores, un peso mayor de palabras clave puede mejorar la clasificación de términos exactos:
264
+
265
+ ```json
266
+ "env": {
267
+ "RAG_HYBRID_WEIGHT": "0.7"
268
+ }
269
+ ```
270
+
271
+ - `0.7`: reajuste de términos exactos algo más fuerte que el valor predeterminado
272
+ - `1.0`: refuerzo máximo de palabras clave
273
+
274
+ ## Cómo funciona
275
+
276
+ Durante la incorporación:
277
+
278
+ 1. El analizador extrae el texto del formato de entrada.
279
+ 2. El segmentador semántico localiza cambios de tema y conserva los bloques de código Markdown.
280
+ 3. Transformers.js crea los embeddings de forma local.
281
+ 4. LanceDB almacena los segmentos, los metadatos, los vectores y el índice de texto completo.
282
+
283
+ Durante la búsqueda:
284
+
285
+ 1. La consulta se convierte en un embedding con el mismo modelo.
286
+ 2. La búsqueda vectorial recupera segmentos relacionados por su significado.
287
+ 3. Los filtros opcionales de distancia y los grupos de relevancia reducen los candidatos cuando están configurados.
288
+ 4. Las coincidencias de texto completo refuerzan los términos exactos de la consulta.
289
+
290
+ ## Agent Skills
291
+
292
+ Las [Agent Skills](https://agentskills.io/) ofrecen a los asistentes de IA instrucciones para formular consultas e incorporar contenido:
293
+
294
+ ```bash
295
+ npx mcp-local-rag skills install --claude-code
296
+ npx mcp-local-rag skills install --claude-code --global
297
+ npx mcp-local-rag skills install --codex
298
+ ```
299
+
300
+ Las habilidades instaladas cubren la formulación de consultas, el refinamiento de resultados y la incorporación de HTML. Si alguna no se activa de forma automática, pide al asistente que use de manera explícita la habilidad mcp-local-rag.
301
+
302
+ ## Configuración
303
+
304
+ El servidor MCP lee variables de entorno. La CLI acepta las mismas variables y las opciones de la tabla; las opciones de la CLI tienen prioridad.
305
+
306
+ | Variable de entorno | Opción de la CLI | Valor predeterminado | Descripción |
307
+ |---------------------|----------|---------|-------------|
308
+ | `BASE_DIR` | `--base-dir` | Directorio actual | Un directorio raíz; la opción de la CLI puede repetirse en `ingest`, `list` y `sync` |
309
+ | `BASE_DIRS` | No disponible | sin configurar | Matriz JSON de directorios raíz; tiene prioridad sobre `BASE_DIR` |
310
+ | `DB_PATH` | `--db-path` | `./lancedb/` | Ubicación de la base de datos vectorial |
311
+ | `CACHE_DIR` | `--cache-dir` | `./models/` | Directorio de caché de modelos |
312
+ | `MODEL_NAME` | `--model-name` | `Xenova/all-MiniLM-L6-v2` | Modelo de embeddings de Hugging Face |
313
+ | `MAX_FILE_SIZE` | `--max-file-size` | `104857600` (100 MB) | Tamaño máximo del archivo en bytes |
314
+ | `CHUNK_MIN_LENGTH` | `--chunk-min-length` | `50` | Longitud mínima de un segmento en caracteres (1–10000) |
315
+ | `RAG_DEVICE` | No disponible | `cpu` | Dispositivo de ejecución de ONNX Runtime |
316
+ | `RAG_DTYPE` | No disponible | `fp32` | Tipo de datos de los embeddings que recibe el modelo seleccionado |
317
+
318
+ ### Directorios raíz (`BASE_DIR` y `BASE_DIRS`)
319
+
320
+ mcp-local-rag solo permite operaciones con archivos dentro de los directorios raíz configurados. Para usar varios, `BASE_DIRS` debe ser una matriz JSON de rutas no vacías:
321
+
322
+ ```bash
323
+ export BASE_DIRS='["/Users/me/Documents/work","/Users/me/Projects/specs"]'
324
+ ```
325
+
326
+ La configuración se resuelve en este orden:
327
+
328
+ 1. Opciones `--base-dir <path>` de la CLI (se pueden repetir en `ingest`, `list` y `sync`)
329
+ 2. `BASE_DIRS`
330
+ 3. `BASE_DIR`
331
+ 4. Directorio actual
332
+
333
+ Cada origen sustituye al de menor prioridad, no se combina con él. Una configuración de `BASE_DIRS` no válida produce un error en lugar de recurrir a `BASE_DIR` o al directorio actual. `status` sigue disponible en MCP para que el cliente pueda informar del error de configuración.
334
+
335
+ ```bash
336
+ npx mcp-local-rag ingest --base-dir /Users/me/work --base-dir /Users/me/specs /Users/me/work/readme.md
337
+ npx mcp-local-rag list --base-dir /Users/me/work --base-dir /Users/me/specs
338
+ npx mcp-local-rag sync --base-dir /Users/me/work --base-dir /Users/me/specs
339
+ BASE_DIRS='["/Users/me/work","/Users/me/specs"]' npx mcp-local-rag list
340
+ ```
341
+
342
+ ### Almacenamiento y modelos
343
+
344
+ `DB_PATH` y `CACHE_DIR` son relativos al directorio de trabajo del proceso de forma predeterminada. Usa rutas absolutas si el cliente MCP puede iniciar el servidor desde distintos directorios de proyecto.
345
+
346
+ Configura `MODEL_NAME` o pasa `--model-name` para elegir un modelo de embeddings de Hugging Face que se ajuste al idioma y al ámbito de tus documentos.
347
+
348
+ mcp-local-rag genera embeddings mediante mean pooling y normalización L2. Al elegir un modelo, comprueba si estos ajustes coinciden con su configuración de inferencia recomendada, ya que el método de pooling puede influir en la calidad de la búsqueda.
349
+
350
+ Cambiar `MODEL_NAME`, `RAG_DEVICE` o `RAG_DTYPE` puede hacer que los vectores existentes sean incompatibles. Usa un `DB_PATH` nuevo o elimina el índice existente y vuelve a incorporar los documentos después de cambiar la configuración de embeddings.
351
+
352
+ Un ejemplo de modelo disponible para documentos en español es `jinaai/jina-embeddings-v2-base-es`.
353
+
354
+ ## Seguridad y funcionamiento
355
+
356
+ - El acceso a archivos está limitado a los directorios raíz configurados con `BASE_DIR`, `BASE_DIRS` o `--base-dir` en la CLI.
357
+ - Se rechazan los enlaces simbólicos cuyo destino esté fuera de todos los directorios raíz configurados.
358
+ - El procesamiento de documentos y las búsquedas no realizan solicitudes de red una vez que los modelos necesarios están en caché.
359
+ - El servidor está diseñado para un único usuario local y no ofrece autenticación ni control de acceso.
360
+ - No ejecutes varios procesos de escritura de la CLI o MCP sobre el mismo `DB_PATH`. Las consultas de solo lectura pueden ejecutarse mientras hay una sincronización en curso.
361
+ - Para crear una copia de seguridad del índice, copia el directorio `DB_PATH` cuando no haya ningún proceso de escritura activo.
362
+
363
+ <details>
364
+ <summary><strong>Solución de problemas</strong></summary>
365
+
366
+ ### "No results found"
367
+
368
+ Primero hay que incorporar los documentos. Ejecuta `"Enumera todos los archivos incorporados"` para comprobarlo.
369
+
370
+ ### Error al descargar el modelo
371
+
372
+ Comprueba la conexión a Internet. Si usas un proxy, revisa la configuración de red. También puedes [descargar el modelo manualmente](https://huggingface.co/Xenova/all-MiniLM-L6-v2).
373
+
374
+ ### "File too large"
375
+
376
+ El límite predeterminado es de 100 MB. Divide el archivo o aumenta `MAX_FILE_SIZE`.
377
+
378
+ ### Consultas lentas
379
+
380
+ Comprueba el número de segmentos con `status`. Los documentos grandes con muchos segmentos pueden ralentizar las consultas. Considera dividir los archivos muy grandes.
381
+
382
+ ### "Path outside BASE_DIR"
383
+
384
+ La ruta debe estar dentro de uno de los directorios raíz configurados: `BASE_DIR`, una entrada de `BASE_DIRS` o una ruta indicada mediante `--base-dir` en la CLI. Usa una ruta absoluta.
385
+
386
+ ### "BASE_DIRS must be a JSON array..."
387
+
388
+ `BASE_DIRS` acepta una matriz JSON con una o más rutas no vacías:
389
+
390
+ - Válido: `BASE_DIRS='["/Users/me/work","/Users/me/specs"]'`
391
+ - No válido: `BASE_DIRS=/a:/b` (no se admite la sintaxis con separadores)
392
+ - No válido: `BASE_DIRS='[]'` (matriz vacía)
393
+
394
+ ### El cliente MCP no muestra las herramientas
395
+
396
+ 1. Comprueba la sintaxis del archivo de configuración
397
+ 2. Cierra el cliente por completo y vuelve a abrirlo (Cmd+Q en Mac para Cursor)
398
+ 3. Haz una prueba directa: `npx mcp-local-rag` debería iniciarse sin errores
399
+
400
+ </details>
401
+
402
+ ## Colaboración
403
+
404
+ Las contribuciones son bienvenidas. Consulta [CONTRIBUTING.md](CONTRIBUTING.md) para preparar el entorno y revisar las pautas.
405
+
406
+ ## Licencia
407
+
408
+ Licencia MIT. Uso gratuito para fines personales y comerciales.
409
+
410
+ ## Artículos del blog
411
+
412
+ - [Building a Local RAG for Agentic Coding](https://www.norsica.jp/blog/local-rag-agentic-coding): análisis técnico del diseño de la segmentación semántica y la búsqueda híbrida.
413
+
414
+ ## Agradecimientos
415
+
416
+ Creado con el [Model Context Protocol](https://modelcontextprotocol.io/) de Anthropic, [LanceDB](https://lancedb.com/) y [Transformers.js](https://huggingface.co/docs/transformers.js).