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.
- package/LICENSE +21 -0
- package/README.de.md +416 -0
- package/README.es.md +416 -0
- package/README.fr.md +416 -0
- package/README.md +491 -0
- package/README.pt-BR.md +416 -0
- package/README.zh-CN.md +416 -0
- package/dist/bin/install-skills.d.ts +20 -0
- package/dist/bin/install-skills.d.ts.map +1 -0
- package/dist/bin/install-skills.js +195 -0
- package/dist/bin/install-skills.js.map +1 -0
- package/dist/chunker/index.d.ts +24 -0
- package/dist/chunker/index.d.ts.map +1 -0
- package/dist/chunker/index.js +2 -0
- package/dist/chunker/index.js.map +1 -0
- package/dist/chunker/semantic-chunker.d.ts +97 -0
- package/dist/chunker/semantic-chunker.d.ts.map +1 -0
- package/dist/chunker/semantic-chunker.js +294 -0
- package/dist/chunker/semantic-chunker.js.map +1 -0
- package/dist/chunker/sentence-splitter.d.ts +28 -0
- package/dist/chunker/sentence-splitter.d.ts.map +1 -0
- package/dist/chunker/sentence-splitter.js +219 -0
- package/dist/chunker/sentence-splitter.js.map +1 -0
- package/dist/cli/common.d.ts +65 -0
- package/dist/cli/common.d.ts.map +1 -0
- package/dist/cli/common.js +138 -0
- package/dist/cli/common.js.map +1 -0
- package/dist/cli/delete.d.ts +8 -0
- package/dist/cli/delete.d.ts.map +1 -0
- package/dist/cli/delete.js +173 -0
- package/dist/cli/delete.js.map +1 -0
- package/dist/cli/file-collection.d.ts +2 -0
- package/dist/cli/file-collection.d.ts.map +1 -0
- package/dist/cli/file-collection.js +53 -0
- package/dist/cli/file-collection.js.map +1 -0
- package/dist/cli/ingest.d.ts +100 -0
- package/dist/cli/ingest.d.ts.map +1 -0
- package/dist/cli/ingest.js +363 -0
- package/dist/cli/ingest.js.map +1 -0
- package/dist/cli/list.d.ts +35 -0
- package/dist/cli/list.d.ts.map +1 -0
- package/dist/cli/list.js +210 -0
- package/dist/cli/list.js.map +1 -0
- package/dist/cli/options.d.ts +100 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +241 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/query.d.ts +24 -0
- package/dist/cli/query.d.ts.map +1 -0
- package/dist/cli/query.js +191 -0
- package/dist/cli/query.js.map +1 -0
- package/dist/cli/read-neighbors.d.ts +11 -0
- package/dist/cli/read-neighbors.d.ts.map +1 -0
- package/dist/cli/read-neighbors.js +224 -0
- package/dist/cli/read-neighbors.js.map +1 -0
- package/dist/cli/status.d.ts +8 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +80 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/sync.d.ts +8 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +244 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli-main.d.ts +12 -0
- package/dist/cli-main.d.ts.map +1 -0
- package/dist/cli-main.js +63 -0
- package/dist/cli-main.js.map +1 -0
- package/dist/embedder/index.d.ts +85 -0
- package/dist/embedder/index.d.ts.map +1 -0
- package/dist/embedder/index.js +284 -0
- package/dist/embedder/index.js.map +1 -0
- package/dist/features/list.d.ts +37 -0
- package/dist/features/list.d.ts.map +1 -0
- package/dist/features/list.js +40 -0
- package/dist/features/list.js.map +1 -0
- package/dist/features/sync.d.ts +207 -0
- package/dist/features/sync.d.ts.map +1 -0
- package/dist/features/sync.js +380 -0
- package/dist/features/sync.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest/compute.d.ts +86 -0
- package/dist/ingest/compute.d.ts.map +1 -0
- package/dist/ingest/compute.js +177 -0
- package/dist/ingest/compute.js.map +1 -0
- package/dist/ingest/file.d.ts +27 -0
- package/dist/ingest/file.d.ts.map +1 -0
- package/dist/ingest/file.js +67 -0
- package/dist/ingest/file.js.map +1 -0
- package/dist/ingest/visual.d.ts +45 -0
- package/dist/ingest/visual.d.ts.map +1 -0
- package/dist/ingest/visual.js +234 -0
- package/dist/ingest/visual.js.map +1 -0
- package/dist/parser/docx-parser.d.ts +12 -0
- package/dist/parser/docx-parser.d.ts.map +1 -0
- package/dist/parser/docx-parser.js +328 -0
- package/dist/parser/docx-parser.js.map +1 -0
- package/dist/parser/html-parser.d.ts +18 -0
- package/dist/parser/html-parser.d.ts.map +1 -0
- package/dist/parser/html-parser.js +102 -0
- package/dist/parser/html-parser.js.map +1 -0
- package/dist/parser/index.d.ts +214 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +454 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/pdf-extract.d.ts +81 -0
- package/dist/parser/pdf-extract.d.ts.map +1 -0
- package/dist/parser/pdf-extract.js +112 -0
- package/dist/parser/pdf-extract.js.map +1 -0
- package/dist/parser/pdf-filter.d.ts +117 -0
- package/dist/parser/pdf-filter.d.ts.map +1 -0
- package/dist/parser/pdf-filter.js +528 -0
- package/dist/parser/pdf-filter.js.map +1 -0
- package/dist/parser/title-extractor.d.ts +69 -0
- package/dist/parser/title-extractor.d.ts.map +1 -0
- package/dist/parser/title-extractor.js +145 -0
- package/dist/parser/title-extractor.js.map +1 -0
- package/dist/pdf-visual/captioner.d.ts +16 -0
- package/dist/pdf-visual/captioner.d.ts.map +1 -0
- package/dist/pdf-visual/captioner.js +63 -0
- package/dist/pdf-visual/captioner.js.map +1 -0
- package/dist/pdf-visual/captioners/fast.d.ts +7 -0
- package/dist/pdf-visual/captioners/fast.d.ts.map +1 -0
- package/dist/pdf-visual/captioners/fast.js +103 -0
- package/dist/pdf-visual/captioners/fast.js.map +1 -0
- package/dist/pdf-visual/captioners/quality.d.ts +7 -0
- package/dist/pdf-visual/captioners/quality.d.ts.map +1 -0
- package/dist/pdf-visual/captioners/quality.js +127 -0
- package/dist/pdf-visual/captioners/quality.js.map +1 -0
- package/dist/pdf-visual/captioners/shared.d.ts +44 -0
- package/dist/pdf-visual/captioners/shared.d.ts.map +1 -0
- package/dist/pdf-visual/captioners/shared.js +104 -0
- package/dist/pdf-visual/captioners/shared.js.map +1 -0
- package/dist/pdf-visual/detector.d.ts +9 -0
- package/dist/pdf-visual/detector.d.ts.map +1 -0
- package/dist/pdf-visual/detector.js +234 -0
- package/dist/pdf-visual/detector.js.map +1 -0
- package/dist/pdf-visual/index.d.ts +13 -0
- package/dist/pdf-visual/index.d.ts.map +1 -0
- package/dist/pdf-visual/index.js +45 -0
- package/dist/pdf-visual/index.js.map +1 -0
- package/dist/pdf-visual/renderer.d.ts +9 -0
- package/dist/pdf-visual/renderer.d.ts.map +1 -0
- package/dist/pdf-visual/renderer.js +177 -0
- package/dist/pdf-visual/renderer.js.map +1 -0
- package/dist/pdf-visual/types.d.ts +62 -0
- package/dist/pdf-visual/types.d.ts.map +1 -0
- package/dist/pdf-visual/types.js +32 -0
- package/dist/pdf-visual/types.js.map +1 -0
- package/dist/server/error-utils.d.ts +79 -0
- package/dist/server/error-utils.d.ts.map +1 -0
- package/dist/server/error-utils.js +148 -0
- package/dist/server/error-utils.js.map +1 -0
- package/dist/server/index.d.ts +258 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +1104 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/list-scanner.d.ts +52 -0
- package/dist/server/list-scanner.d.ts.map +1 -0
- package/dist/server/list-scanner.js +72 -0
- package/dist/server/list-scanner.js.map +1 -0
- package/dist/server/tool-definitions.d.ts +8 -0
- package/dist/server/tool-definitions.d.ts.map +1 -0
- package/dist/server/tool-definitions.js +181 -0
- package/dist/server/tool-definitions.js.map +1 -0
- package/dist/server/tool-input.d.ts +37 -0
- package/dist/server/tool-input.d.ts.map +1 -0
- package/dist/server/tool-input.js +216 -0
- package/dist/server/tool-input.js.map +1 -0
- package/dist/server/types.d.ts +331 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +3 -0
- package/dist/server/types.js.map +1 -0
- package/dist/server-main.d.ts +46 -0
- package/dist/server-main.d.ts.map +1 -0
- package/dist/server-main.js +242 -0
- package/dist/server-main.js.map +1 -0
- package/dist/utils/base-dirs.d.ts +212 -0
- package/dist/utils/base-dirs.d.ts.map +1 -0
- package/dist/utils/base-dirs.js +422 -0
- package/dist/utils/base-dirs.js.map +1 -0
- package/dist/utils/errors.d.ts +24 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +53 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/limits.d.ts +26 -0
- package/dist/utils/limits.d.ts.map +1 -0
- package/dist/utils/limits.js +28 -0
- package/dist/utils/limits.js.map +1 -0
- package/dist/utils/list-sources.d.ts +47 -0
- package/dist/utils/list-sources.d.ts.map +1 -0
- package/dist/utils/list-sources.js +50 -0
- package/dist/utils/list-sources.js.map +1 -0
- package/dist/utils/raw-data-utils.d.ts +131 -0
- package/dist/utils/raw-data-utils.d.ts.map +1 -0
- package/dist/utils/raw-data-utils.js +255 -0
- package/dist/utils/raw-data-utils.js.map +1 -0
- package/dist/utils/scan.d.ts +126 -0
- package/dist/utils/scan.d.ts.map +1 -0
- package/dist/utils/scan.js +221 -0
- package/dist/utils/scan.js.map +1 -0
- package/dist/utils/scope-match.d.ts +43 -0
- package/dist/utils/scope-match.d.ts.map +1 -0
- package/dist/utils/scope-match.js +87 -0
- package/dist/utils/scope-match.js.map +1 -0
- package/dist/utils/sensitive-path.d.ts +23 -0
- package/dist/utils/sensitive-path.d.ts.map +1 -0
- package/dist/utils/sensitive-path.js +91 -0
- package/dist/utils/sensitive-path.js.map +1 -0
- package/dist/utils/sync-path-key.d.ts +20 -0
- package/dist/utils/sync-path-key.d.ts.map +1 -0
- package/dist/utils/sync-path-key.js +33 -0
- package/dist/utils/sync-path-key.js.map +1 -0
- package/dist/vectordb/index.d.ts +168 -0
- package/dist/vectordb/index.d.ts.map +1 -0
- package/dist/vectordb/index.js +619 -0
- package/dist/vectordb/index.js.map +1 -0
- package/dist/vectordb/search-filters.d.ts +39 -0
- package/dist/vectordb/search-filters.d.ts.map +1 -0
- package/dist/vectordb/search-filters.js +136 -0
- package/dist/vectordb/search-filters.js.map +1 -0
- package/dist/vectordb/types.d.ts +196 -0
- package/dist/vectordb/types.d.ts.map +1 -0
- package/dist/vectordb/types.js +224 -0
- package/dist/vectordb/types.js.map +1 -0
- package/package.json +105 -0
- package/skills/mcp-local-rag/SKILL.md +308 -0
- package/skills/mcp-local-rag/references/cli-reference.md +175 -0
- package/skills/mcp-local-rag/references/html-ingestion.md +78 -0
- package/skills/mcp-local-rag/references/query-optimization.md +57 -0
- 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
|
+
[](https://github.com/shinpr/mcp-local-rag)
|
|
8
|
+
[](https://www.npmjs.com/package/mcp-local-rag)
|
|
9
|
+
[](https://opensource.org/licenses/MIT)
|
|
10
|
+
[](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).
|