“¿Cuál de nuestros contratos tiene una penalidad por terminación?” suena como una tarea para un agente de IA, y lo es, pero no leyendo los contratos. Un agente que abre cada archivo para responderlo gasta su contexto en 297 documentos irrelevantes y aún tiene que confiar en que notó la cláusula en los otros tres. Con GroupDocs.Search.Mcp ejecutándose localmente en Docker, Claude Desktop, Cursor o Copilot indexa la carpeta una vez, pregunta al índice qué contratos coinciden y solo lee las cláusulas:
¿Cuáles de mis contratos mencionan una penalidad por terminación? Cite la cláusula de cada uno.
La versión paso a paso con configuración y solución de problemas está en la documentación: Cómo hacer preguntas a través de una carpeta de contratos con un agente de IA.
Qué sale mal cuando el agente lee todo
Tres cosas, en orden creciente de peligro. Es lento y costoso: cada contrato pasa por la ventana de contexto cada vez que preguntas. Se queda sin espacio: después de unas cuantas docenas de documentos extensos, los primeros salen de la ventana o se resumen, y en el resumen es donde una cláusula desaparece. Y falla silenciosamente: “Encontré dos contratos con una penalidad por terminación” suena igual si el agente revisó los 300 o solo hojeó 40. Nada en la respuesta indica cuáles.
Un índice elimina el primer problema y expone el tercero. La pregunta “qué archivos contienen estas palabras” tiene una respuesta exacta, y una herramienta de búsqueda la devuelve con un recuento que puedes verificar.
Cómo debería ser la secuencia correcta
Indexa una vez, busca, luego lee las coincidencias. Aquí está lo que el servidor devolvió en nuestra prueba, contra cinco contratos sintéticos: dos con una cláusula de penalidad y un NDA que menciona ambas palabras pero descarta la penalidad.
-> add_to_index {"documentsPath":"contracts","indexName":"contracts"}
<- Indexed 'contracts' into index 'contracts': 5 document(s) added,
5 in the index.
-> search {"query":"termination penalty","indexName":"contracts"}
<- { "documentsFound": 0,
"hint": "Unquoted words separated by spaces do not match. Search the
phrase as \"termination penalty\", or combine the words with
AND / OR, e.g. termination AND penalty." }
-> search {"query":"termination AND penalty","indexName":"contracts"}
<- documentsFound 3: acme-master-services-agreement.pdf,
globex-consulting-agreement.docx, initech-nda.docx
-> get_text_fragments {"query":"\"termination penalty\"",...}
<- === contracts/acme-master-services-agreement.pdf ===
…a termination penalty of three monthly fees applies, payable
within 30…
=== contracts/globex-consulting-agreement.docx ===
…Early termination penalty: the Client pays 50 percent of the fees…
Qué enseñan los tres resultados
La primera consulta falló, y el servidor explicó por qué. En GroupDocs.Search, las palabras separadas por espacios sin comillas no coinciden como frase. En lugar de devolver un cero simple, el servidor adjunta un hint que explica la corrección, y los agentes se ajustan en la siguiente llamada. Este es el error más común la primera vez, y se maneja en la propia respuesta.
AND encontró tres, la frase encontró dos. AND se evalúa por documento. El NDA de Initech contiene ambas palabras en la oración “There is no fee and no penalty associated with termination of this NDA”. Un modelo que solo lea el resultado de la búsqueda lo contaría; al leer el pasaje, informa del NDA por separado como un contrato que excluye explícitamente la penalidad. Esa distinción es el valor completo de la tercera llamada.
Los formatos no importaron. Las coincidencias provinieron de un PDF y un DOCX, y un contrato TXT estaba en el mismo índice. El motor indexa 82 formatos, de modo que una carpeta que creció durante diez años con distintas herramientas responde a una sola consulta.
Las llamadas, en orden
user agent Search MCP server
| "Which contracts mention a termination penalty?" |
|---------------->| |
| |-- add_to_index (once) ------------------>|
| |-- search {"query":"termination AND |
| | penalty"} -------------------->|
| |<- 3 files --------------------------------|
| |-- get_text_fragments {"query": |
| | "\"termination penalty\""} ----------->|
| |<- the two clauses, with context ----------|
|<- "Acme: 3 monthly fees (12.3). Globex: 50% of remaining |
| fees. Initech NDA: explicitly no penalty." |
Después del primer indexado, cada nueva pregunta cuesta dos llamadas sin importar cuántos contratos haya. “¿Qué contratos tienen una cláusula de fuerza mayor?” es "force majeure". “¿Qué arrendamientos se renuevan automáticamente?” es renewal OR renews, y el pasaje dice “renews automatically for 12 months unless notice is given”. Una cláusula sobre períodos de aviso es terminat? AND notice, donde el ? representa un carácter y coincide con terminate.
Dónde permanece el humano en el bucle
Esto no es revisión de contratos, y no debe pretender serlo. El índice encuentra y cita texto; el agente resume lo que citó. Dos hábitos lo mantienen honesto. Pide la cita con cada afirmación, de modo que un resumen incorrecto sea visible junto a la oración que malinterpretó. Y solicita también los casi‑aciertos, “lista los contratos que mencionan las palabras sin la cláusula”, porque allí es donde el juicio del lector importa más.
Límites honestos
- En modo de evaluación un índice contiene como máximo 100 documentos y una búsqueda devuelve como máximo 10, y cada respuesta lo indica. Llama a
get_license_statusantes de una ejecución real, porque una respuesta limitada parece completa. - Los contratos escaneados sin capa de texto se indexan solo por sus propiedades de archivo; no hay OCR.
- La búsqueda de texto completo coincide con palabras: un agente debe usar el vocabulario del contrato, o probar variantes.
- Eliminar un archivo de una carpeta indexada no está soportado; elimina la carpeta y vuelve a agregar lo que necesites.
Preguntas frecuentes
¿Puede un agente de IA buscar en todos mis contratos sin subirlos?
Sí. El índice se crea y busca en un contenedor en tu máquina; solo las cláusulas que el agente cita llegan al modelo.
¿Cuántos contratos puede manejar?
Con licencia, tantos como tu disco y memoria lo permitan; el índice se crea una vez y se actualiza de forma incremental. El modo de evaluación se detiene en 100 por índice.
¿Por qué mi búsqueda de dos palabras no devolvió nada?
Las palabras sin comillas no coinciden como frase. Cítalas, "termination penalty", o une las palabras con AND; el hint del servidor dice lo mismo.
Profundizar
- Documentación, guía canónica: Cómo hacer preguntas a través de una carpeta de contratos con un agente de IA
- Centro de documentación: GroupDocs.Search MCP Server
- Empieza aquí: ¿Necesitas una base de datos vectorial para hacer preguntas sobre una carpeta de documentos?
- Relacionado: Respuestas fundamentadas desde tus archivos: cita el pasaje, no la memoria del modelo
- Relacionado: grep no puede leer PDF: brinda a tu agente de codificación un índice de documentos
- Relacionado: Busca en tu archivo de correo electrónico con un agente de IA: PST, MSG, EML y los adjuntos dentro
- Relacionado: Memoria de proyecto para agentes de IA: un índice por proyecto, mantenido actualizado
- Modelo on‑premise y de seguridad: 3 arquitecturas para el procesamiento de documentos con IA, y la que mantiene los archivos dentro de tu red
- Preguntas: GroupDocs Search forum
- Fuente: GroupDocs.Search.Mcp on GitHub