Často ne. Pro složku smluv, zpráv nebo e‑mailů najde AI agent s nástrojem pro full‑textové vyhledávání správné soubory, přečte jen odpovídající úryvky a cituje je, a index běží lokálně bez modelu pro vkládání a bez vektorového úložiště. GroupDocs.Search.Mcp poskytuje Claude Desktop, Claude Code, Cursor nebo Copilot tento nástroj v jednom Docker příkazu:

Indexujte složku smluv, pak mi řekněte, které smlouvy zmiňují pokutu za ukončení a citujte příslušnou klauzuli.

Verze krok za krokem s konfigurací a řešením problémů je v dokumentaci: Jak vyhledávat dokumenty pomocí AI agentů s MCP.

Proč všichni nejprve sáhnou po embeddingech?

Protože „retrieval‑augmented generation“ přišla jako recept: rozdělit dokumenty na úseky, embedovat každý úsek, uložit vektory, embedovat otázku, vzít nejbližší úseky a vložit je do promptu. Funguje to a pro otázky, které nejsou formulovány podobně jako dokumenty, je to správný nástroj. Ale jde o pipeline s voláním embedding modelu, úložištěm, laděním chunkingu a úkolem re‑embedování pokaždé, když se dokumenty změní. Pro „které z mých 300 smluv zmiňují pokutu za ukončení“ tato mašinerie odpovídá otázce, na kterou index vyhledávání odpovídá přímo.

Evidence došla k intuici. Studie publikovaná na arXiv koncem roku 2025 (Keyword search is all you need) poskytla agentovi jen vyhledávání klíčových slov a regexů ve složce a změřila to proti standardní RAG pipeline: více než 90 % RAG skóre, bez vektorové databáze, a lépe vhodné pro sbírky, které se často mění. Kódovací agenti již v praxi ukázali tento vzor: vyhledávají pomocí grep, upřesňují a znovu vyhledávají.

Co dělá agent místo toho?

Tři volání. GroupDocs.Search.Mcp poskytuje osm nástrojů; smyčka potřebuje tři z nich:

user              agent                         Search MCP server
 |  "Which contracts mention a termination penalty?"           |
 |---------------->|                                           |
 |                 |-- add_to_index ------------------------->|  reads the
 |                 |   {"documentsPath":"contracts",           |  files once,
 |                 |    "indexName":"contracts"}               |  stores text
 |                 |<- "5 document(s) added, 5 in the index" --|
 |                 |-- search ------------------------------->|
 |                 |   {"query":"termination AND penalty"}     |
 |                 |<- {"documentsFound":3, "documents":[ ... |  which files
 |                 |-- get_text_fragments ------------------->|
 |                 |   {"query":"\"termination penalty\""}     |
 |                 |<- === contracts/acme-...-agreement.pdf ===|  the passages
 |<- "Two contracts carry one: Acme (3 monthly fees, 12.3),    |
 |    Globex (50% of the remaining fees). Initech excludes it."|

add_to_index načte soubory jednou a uloží text do pojmenovaného indexu na disku. search vrací odpovídající soubory jako JSON s počty výskytů. get_text_fragments vrací každý výskyt s několika slovy kontextu, takže agent cituje klauzuli místo načítání celé smlouvy.

Zde je, co server ve skutečnosti vrátil v našem testu na pět syntetických smluv:

-> 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 (1 occurrence(s)) ===
     …a termination penalty of three monthly fees applies, payable
     within 30…
   === contracts/globex-consulting-agreement.docx (1 occurrence(s)) ===
     …Early termination penalty: the Client pays 50 percent of the fees…

Všimněte si třetí smlouvy. NDA od Initech odpovídala termination AND penalty, protože říká „neexistuje žádný poplatek ani žádná pokuta spojená s ukončením“. Úryvek je to, co odlišuje shodu od zmínky, a agent, který úryvky čte, to říká. To je zakotvení: každé tvrzení v odpovědi ukazuje na soubor a větu, kterou můžete otevřít.

Kde každá metoda vítězí?

Pipeline pro embedding                 Agentické full‑textové vyhledávání
-------------------------------------    -------------------------------------
rozdělit, embedovat, uložit do vektorového úložiště    add_to_index: lokální full‑textový index
embedovat otázku, vzít top‑k úseků                     agent vyhledává, upřesňuje, znovu vyhledává
vložit úseky do promptu                                 get_text_fragments: citované úryvky
re‑embedovat při změně dokumentů                       update_index znovu načte, co se změnilo
potřebuje embedding model a úložiště                    žádné volání modelu, žádná síť během běhu
odpovídá významu; řazení je neprůhledné                 odpovídá slovům; každý výsledek je vysvětlitelný

Full‑textové vyhledávání selže, když otázka a dokument nesdílejí žádná slova: „které smlouvy jsou pro nás rizikové?“ nemá žádné klíčové slovo. Vítězí, když je slovní zásoba sdílena, což popisuje většinu otázek, které lidé kladou ohledně svých dokumentů: název klauzule, produkt, zákazník, číslo faktury, časové období. Když dotaz nezasáhne, agent zkusí renewal OR renews nebo fuzzy shodu, tak jako by to udělal člověk. Server pomáhá: necitovaný dvouslovný dotaz v GroupDocs.Search nic nevrátí a prázdný výsledek obsahuje hint, který agentovi říká, aby frázi citoval.

Který nástroj pro kterou otázku?

Uživatel se ptá Agent volá
“Indexujte tuto složku” add_to_index
“Které soubory zmiňují X?” search
“Co o X říká?” get_text_fragments
“Soubory se změnily, obnovit” update_index
“Zapomenout na složku drafts” remove_from_index
“Co je v indexu?” get_index_info
“Spustit samostatný index” create_index
“Proč jen 10 výsledků?” get_license_status

Index rozumí 82 formátům, včetně PDF, Office, OpenDocument, HTML a archivům e‑mailů (PST, OST, MSG, EML) s jejich přílohami.

Jak to spustit?

claude mcp add groupdocs-search -- docker run --rm -i \
  -v /path/to/documents:/data ghcr.io/groupdocs-search/search-net-mcp:latest

Cursor, Claude Desktop, VS Code s GitHub Copilot a ostatní klienti používají stejný kontejner ve svém konfiguračním souboru: Registrace v AI klientech. Na Linuxu přidejte --user "$(id -u):$(id -g)", aby kontejner mohl zapisovat svůj index do vaší složky. Server běží na engine GroupDocs.Search 26.10, jehož nový formát indexu zmenšuje indexy a přibližně dělí jejich paměťovou náročnost na polovinu (poznámky k vydání).

Upřímná omezení

  • V evaluačním režimu index obsahuje maximálně 100 dokumentů a vyhledávání vrací maximálně 10; každá odpověď to uvádí. Nejprve zavolejte get_license_status.
  • Jedná se o full‑textové vyhledávání, ne o sémantické: odpovídá slovům, ne významu.
  • Žádné OCR: naskenované PDF bez textové vrstvy jsou indexovány pouze podle vlastností souboru.
  • Distribuuje se pouze jako Docker image (zabalený nástroj překračuje limit velikosti na NuGet).

Často kladené otázky

Může Claude prohledávat mé místní dokumenty bez jejich nahrávání?
Ano. Server běží v kontejneru na vašem počítači a čte složku, kterou připojíte; pouze úryvky, které agent cituje, se dostanou k modelu.

Je to RAG?
Je to retrieval‑augmented, ale agentické: model rozhoduje, co vyhledávat a kdy má dostatek, používá full‑textový index místo embeddingů.

Co se stane, když se moje dokumenty změní?
Požádejte agenta o obnovení. update_index znovu načte jen změněné, přidané a smazané soubory.

Ponořte se hlouběji