Om in bulk gegevens uit documenten te extraheren met een AI‑agent, schrijf je het schema in de prompt, richt je de agent op een map en vraag je aan het einde om een lijst met uitzonderingen. De GroupDocs.Parser.Mcp‑server leest lokaal in een Docker‑container, zodat elk bestand door dezelfde extractietools gaat en er geen document de machine verlaat. De LLM bepaalt de volgorde van het werk; de engine leest de bestanden.

Voor elke PDF in mijn documentenmap: extraheer de tabellen als JSON, som de bedragkolom op, en geef me één tabel met bestandsnaam, totaal, aantal pagina’s.

De stap‑voor‑stap versie met configuratie en probleemoplossing staat in de documentatie: Hoe gegevens uit een map met documenten in één keer te extraheren.

Waarom levert handmatige extractie inconsistente gegevens op?

Wanneer mensen waarden één voor één uit documenten kopiëren, wordt elk bestand een beetje anders behandeld: de ene persoon neemt belasting op, de andere niet, een derde slaat het bestand met de vreemde lay‑out over. De inconsistentie is onzichtbaar totdat de totalen worden vergeleken. Een workflow lost dit op door de regels expliciet te maken en ze op elk bestand op dezelfde manier toe te passen. Met een agent staan de regels in één prompt, en de extractietools gedragen zich identiek bij bestand één en bestand tweehonderd.

Hoe bouw je de workflow?

Mount de map in de container als /data, stel GROUPDOCS_MCP_STORAGE_PATH=/data in, en geef de agent deze stappen.

  1. Controleer de licentie. Prompt: “Run get_license_status and tell me the mode.” Extractie zonder licentie is beperkt, en een gedeeltelijke lezing van een map levert een stilweg onjuiste dataset op.
  2. Triage van de map. Prompt: “For each file, report format, page count and whether text extraction returns anything.” get_document_info levert type, paginacount en grootte, en een één‑pagina extract_text‑aanroep toont of er tekst bestaat.
  3. Herstel het schema. Prompt: “For each readable file, extract the line-items table as JSON. Columns: item, quantity, amount. Total the amount column.” Dit gebruikt extract_tables.
  4. Verzamel fouten expliciet. Prompt: “List every file that failed, was password-protected, or returned no table, with the reason.” Een batch die alleen successen rapporteert verbergt de uitzonderingen.
  5. Schrijf de output. Prompt: “Write one row per file to a CSV in the output folder.”

Bestanden worden binnen de container op naam opgelost, dus de agent geeft invoice-014.pdf door, niet een host‑pad.

Wat beslist de agent, en wat doet de engine?

Stap De agent beslist De engine doet
Triageren Welke bestanden er uit geëxtraheerd moeten worden Rapporteert type, pagina’s en grootte; extract_text toont of er tekst bestaat
Vastleggen Welke tool elk bestand nodig heeft Retourneert tekst of tabelrijen uit het bestand
Validatie Of een totaal overeenkomt met de tekst Niets; de agent vergelijkt
Uitzonderingen Welke bestanden op de lijst komen Retourneert het foutbericht voor een slecht bestand
Uitvoer De structuur van de CSV Niets; de agent schrijft het

De scheiding is het punt. Het vastleggen van de waarden is deterministisch engine‑werk; het beoordelen en samenstellen ervan is van de agent.

Voorbeeldsessie (verkort):

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).

Wat gebeurt er met bestanden die niet passen?

Een scan heeft geen tekstlaag, dus tabelextractie levert niets op. Zet die apart, of laat de agent vertakken naar extract_barcodes wanneer de pagina een trackingnummer of ordercode bevat. De doorlooplijst fungeert als een inventaris van welke delen van het archief scans zijn. Een wachtwoord‑beveiligd bestand faalt bij zijn eigen oproep, dus vraag de agent het te rapporteren en door te gaan; de tools accepteren een password‑argument wanneer je er een hebt.

Hoe houd je een grote run betaalbaar?

  • Beperk per pagina wanneer de gegevens een bekende locatie hebben, zoals de eerste pagina van elke factuur.
  • Vermijd extract_images in bulk. Het schrijft een bestand voor elke afbeelding, en een map met geïllustreerde rapporten produceert honderden.
  • Let op het gebruik met meter. Bij meter‑licenties wordt elke oproep als verwerking gefactureerd, dus een gerichte sweep kost minder dan een volledige.

Wat zijn de limieten?

Zonder licentie is extractie beperkt; de exacte limieten staan op de licentiepagina van de bibliotheek. De server heeft geen OCR, dus gescande tekst kan niet worden vastgelegd. Hij wordt alleen geleverd als Docker‑image; er is geen dnx‑commando.

Hoe registreer je de server?

Een minimale handmatige invoer voor Cursor, Claude Desktop of Windsurf, met gebruik van de container‑paden uit de Parser‑configuratiedocumentatie:

{
  "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"]
    }
  }
}

FAQ

Kan ik een map met facturen verwerken met AI zonder ze te uploaden?
Ja. De container leest de aangekoppelde map en communiceert met je client via stdio, zodat de facturen op je machine blijven.

Hoe extraheer ik tekst in batch uit PDF’s lokaal?
Vraag de agent om over de map te itereren en extract_text per bestand, pagina voor pagina aan te roepen voor lange documenten, omdat zeer grote uitvoer wordt afgekapt met een marker.

Kan de agent gegevensinvoer uit documenten automatiseren?
Hij kan de geëxtraheerde rijen samenvoegen tot een CSV of een samenvattingstabel. Controleer de lijst met uitzonderingen voordat iets in een ander systeem wordt ingevoerd.

Ga dieper