Para extraer datos en bloque de documentos con un agente de IA, escribe el esquema en el prompt, apunta el agente a una carpeta y exige una lista de excepciones al final. El servidor GroupDocs.Parser.Mcp realiza la lectura localmente en un contenedor Docker, de modo que cada archivo pasa por las mismas herramientas de extracción y ningún documento abandona la máquina. El LLM decide el orden del trabajo; el motor lee los archivos.

Para cada PDF en mi carpeta de documentos: extrae las tablas como JSON, suma la columna de importe y dame una tabla con el nombre del archivo, el total y el recuento de páginas.

La versión paso a paso con configuración y solución de problemas está en la documentación: Cómo extraer datos de una carpeta de documentos de una sola vez.

¿Por qué la extracción manual produce datos inconsistentes?

Cuando las personas copian valores de los documentos uno a la vez, cada archivo se maneja ligeramente diferente: una persona incluye impuestos, otra no, una tercera omite el archivo con un diseño extraño. La inconsistencia es invisible hasta que se comparan los totales. Un flujo de trabajo corrige esto al hacer explícitas las reglas y aplicarlas a cada archivo de la misma manera. Con un agente, las reglas viven en un solo prompt y las herramientas de extracción se comportan idénticamente en el archivo uno y el archivo doscientos.

¿Cómo construyes el flujo de trabajo?

Monta la carpeta en el contenedor como /data, establece GROUPDOCS_MCP_STORAGE_PATH=/data y proporciona al agente estos pasos.

  1. Verificar la licencia. Prompt: “Run get_license_status and tell me the mode.” La extracción sin licencia está limitada, y una lectura parcial de una carpeta genera un conjunto de datos silenciosamente incorrecto.
  2. Triangular la carpeta. Prompt: “For each file, report format, page count and whether text extraction returns anything.” get_document_info suministra tipo, recuento de páginas y tamaño, y una llamada de una página a extract_text muestra si existe texto.
  3. Corregir el esquema. Prompt: “For each readable file, extract the line-items table as JSON. Columns: item, quantity, amount. Total the amount column.” Esto usa extract_tables.
  4. Recopilar fallos explícitamente. Prompt: “List every file that failed, was password-protected, or returned no table, with the reason.” Un lote que solo informa éxitos oculta las excepciones.
  5. Escribir la salida. Prompt: “Write one row per file to a CSV in the output folder.”

Los archivos se resuelven por nombre dentro del contenedor, por lo que el agente pasa invoice-014.pdf, no una ruta del host.

¿Qué decide el agente y qué hace el motor?

Paso Decide el agente Hace el motor
Triangular Qué archivos extraer Informa tipo, páginas y tamaño; extract_text muestra si existe texto
Capturar Qué herramienta necesita cada archivo Devuelve texto o filas de tabla del archivo
Validar Si un total coincide con el texto Nada; el agente compara
Excepciones Qué archivos van a la lista Devuelve el mensaje de error para un archivo problemático
Salida La forma del CSV Nada; el agente lo escribe

La división es el punto clave. Capturar los valores es trabajo determinista del motor; juzgarlos y ensamblarlos es tarea del agente.

Sesión de ejemplo (abreviada):

You:    Check the license, triage the folder, then extract line items from every readable PDF and list the exceptions.
Agent:  [calls get_license_status, get_document_info x12, extract_text, extract_tables x10]
        License mode: evaluation. Results below are a smoke test.
        12 files: 10 with a text layer, 1 scan, 1 password-protected.
        Totals written for 10 files. Exceptions: scan-007.pdf (no text layer), hr-020.pdf (password required).

¿Qué ocurre con los archivos que no encajan?

Un escaneo no tiene capa de texto, por lo que la extracción de tablas no devuelve nada para él. Sepáralos, o permite que el agente ramifique a extract_barcodes cuando la página lleva un número de seguimiento o código de orden. La lista de paso a través funciona también como inventario de qué partes del archivo son escaneos. Un archivo protegido con contraseña falla su propia llamada, así que pide al agente que lo informe y continúe; las herramientas aceptan un argumento password cuando lo tienes.

¿Cómo mantienes una ejecución grande asequible?

  • Restringir por página cuando los datos tienen una ubicación conocida, como la primera página de cada factura.
  • Evitar extract_images en bloque. Escribe un archivo por cada imagen, y una carpeta de informes ilustrados genera cientos.
  • Vigilar el uso medido. Con licencias medidas cada llamada se factura por procesamiento, por lo que una captura dirigida cuesta menos que una exhaustiva.

¿Cuáles son los límites?

Sin licencia, la extracción está limitada; los límites exactos están en la página de licencias de la biblioteca. El servidor no tiene OCR, por lo que el texto escaneado no puede capturarse. Se entrega solo como imagen Docker; no existe el comando dnx.

¿Cómo registras el servidor?

Una entrada manual mínima para Cursor, Claude Desktop o Windsurf, usando las rutas del contenedor de la documentación de configuración de Parser:

{
  "mcpServers": {
    "groupdocs-parser": {
      "command": "docker",
      "args": ["run", "--rm", "-i",
               "-v", "/path/to/documents:/data",
               "-e", "GROUPDOCS_MCP_STORAGE_PATH=/data",
               "ghcr.io/groupdocs-parser/parser-net-mcp:latest"]
    }
  }
}

Preguntas frecuentes

¿Puedo procesar una carpeta de facturas con IA sin subirlas?
Sí. El contenedor lee la carpeta montada y se comunica con tu cliente a través de stdio, de modo que las facturas permanecen en tu máquina.

¿Cómo extraigo texto en bloque de PDFs localmente?
Pide al agente que recorra la carpeta y llame a extract_text por archivo, página por página para documentos extensos, porque las salidas muy grandes se truncan con un marcador.

¿Puede el agente automatizar la entrada de datos desde documentos?
Puede ensamblar las filas extraídas en un CSV o una tabla resumida. Revisa la lista de excepciones antes de que cualquier cosa se ingrese en otro sistema.

Profundiza más