Váš programovací agent je velmi dobrý v hledání věcí v repozitáři, pokud jsou textové. Požádejte Claude Code nebo Cursor, co datasheet senzoru říká o provozní teplotě, a on použije grep, nic nenajde a buď hádá, nebo se vzdá, protože datasheet je PDF a záznam rozhodnutí je Word soubor. GroupDocs.Search.Mcp běží lokálně v Dockeru a poskytuje agentovi full‑textový index nad těmito dokumenty, se stejným cyklem hledat‑pak‑číst, který už používá pro kód:

Indexujte složku docs a pak mi řekněte, co datasheet senzoru říká o provozní teplotě a který ADR rozhodl o úložišti telemetrie.

Verze krok za krokem s konfigurací a řešením problémů je v dokumentaci: Jak nechat Claude Code nebo Cursor prohledávat PDF a Word dokumenty v repozitáři.

Proč grep vrací prázdný výsledek?

Protože PDF a DOCX neukládají svá slova jako prostý text. DOCX je zip archiv; PDF komprimuje své textové proudy. Hledat po bajtu a slova tam nejsou. Otestovali jsme to na malém repozitáři: jeden PDF datasheet, záznam rozhodnutí o architektuře a požadavkový dokument v DOCX a zdrojový soubor.

$ grep -ri "TimescaleDB\|operating temperature\|I2C" docs/
$ grep -rn "datasheet" src/
src/sensor.py:1:MAX_TEMP_C = 85  # see docs/datasheet

Jediný výskyt je komentář v kódu, který odkazuje na dokument, který agent nemůže přečíst. To je mezera: důvod za konstantou, rozhodnutí za návrhem, požadavek za testem často žijí právě v těchto souborech.

Co se změní s indexem?

Agent získá nástroj pro vyhledávání dokumentů. Zaregistrujte server z kořene repozitáře, aby byl repozitář připojen jako složka úložiště:

claude mcp add groupdocs-search -- docker run --rm -i \
  -v "$(pwd)":/data ghcr.io/groupdocs-search/search-net-mcp:latest

Pak stejné otázky vrátí odpovědi. Toto server vrátil v našem testovacím repozitáři (cesty zobrazené relativně ke kořenu repozitáře):

-> add_to_index {"documentsPath":"docs","indexName":"gateway"}
<- Indexed 'docs' into index 'gateway': 3 document(s) added,
   3 in the index.

-> search {"query":"TimescaleDB","indexName":"gateway"}
<- documentsFound 1: docs/adr-007-telemetry-storage.docx

-> get_text_fragments {"query":"I2C","indexName":"gateway"}
<- === docs/requirements-v2.docx (1 occurrence(s)) ===
     …REQ-15: the I2C bus runs at 400 kHz.…
   === docs/tmp117-sensor-datasheet.pdf (1 occurrence(s)) ===
     …I2C address selection: ADD0 pin to GND gives 0x48…

Jeden dotaz našel požadavek a řádek z datasheetu dohromady, což je typ křížové reference, kterou je obtížné provést ručně a nemožné pomocí grep. Na našem malém indexu se vyhledávání vrátilo za 80 až 240 milisekund po prvním volání.

Smyčka, kterou agent už zná

user              agent                         Search MCP server
 |  "What does the datasheet say about I2C addresses?"         |
 |---------------->|                                           |
 |                 |-- search {"query":"I2C"} --------------->|
 |                 |<- requirements-v2.docx,                   |
 |                 |   tmp117-sensor-datasheet.pdf ------------|
 |                 |-- get_text_fragments {"query":"I2C"} --->|
 |                 |<- "...ADD0 pin to GND gives 0x48..." -----|
 |<- "0x48 with ADD0 to GND, 0x49 to V+ (datasheet, p.1);      |
 |    REQ-15 runs the bus at 400 kHz."                         |

search odpovídá, které soubory, get_text_fragments vrací odpovídající řádky s několika slovy kontextu a agent cituje obojí. Je to tvar grep, rozšířený na 82 formátů: PDF, DOCX, XLSX, PPTX, HTML, Markdown, dokonce i e‑mailové vlákna, která někdo exportoval do repozitáře.

Řekněte agentovi, kdy to použít

Agenti následují projektové instrukce o tom, kdy sáhnout po nástroji. Tři řádky v CLAUDE.md nebo AGENTS.md dělají rozdíl mezi agentem, který zkouší grep, selže a vzdá se, a tím, který nejprve prohledá index:

PDF, DOCX and XLSX files under docs/ are indexed in the groupdocs-search MCP index
'docs'. grep cannot read them: use search (quote phrases) and get_text_fragments
for anything in specs, datasheets or ADRs, and cite the file.
Run update_index (indexName: docs) after pulling changes.

Dva úklidové body. Index se zapisuje do .groupdocs-search-index/ v kořeni připojené složky, takže jej přidejte do .gitignore. A po pullu update_index znovu načte jen to, co se změnilo, takže udržování indexu aktuálního stojí jedno volání.

Cursor a VS Code

Stejný kontejner funguje v libovolném MCP klientovi. Ve VS Code může pracovní prostor .vscode/mcp.json připojit libovolnou otevřenou složku, takže index sleduje projekt:

{
  "servers": {
    "groupdocs-search": {
      "type": "stdio",
      "command": "docker",
      "args": [ "run", "--rm", "-i",
                "-v", "${workspaceFolder}:/data",
                "ghcr.io/groupdocs-search/search-net-mcp:latest" ]
    }
  }
}

Cursor používá stejný command a args pod mcpServers v .cursor/mcp.json. Zacommitujte konfigurační soubor a každý vývojář v projektu získá nástroj; udržujte samotný index mimo git.

Proč nejprve nepřevádět vše na text?

Můžete: nechat agenta převádět každý PDF, když ho potřebuje, nebo kontrolovat Markdown kopie v repozitáři. Obě možnosti fungují pro několik souborů. Index provede konverzi jednou, udržuje ji aktuální jedním voláním a odpovídá, který soubor je důležitý, ještě předtím, než agent něco přečte – to je krok, který udržuje kontext dlouhé relace malý. Motor za tím je GroupDocs.Search, který čte Office a PDF dokumenty přímo, místo přes konvertor, který byste museli udržovat.

Upřímná omezení

  • V režimu hodnocení index obsahuje maximálně 100 dokumentů a vyhledávání vrátí maximálně 10; nejprve zavolejte get_license_status.
  • Full‑text, ne sémantické: agent musí použít slova, která dokumenty používají, nebo zkusit varianty.
  • Žádné OCR: naskenovaný datasheet bez textové vrstvy je indexován jen podle vlastností souboru.
  • Pouze Docker. Na Linuxu přidejte --user "$(id -u):$(id -g)", aby kontejner mohl zapisovat index do repozitáře, který vlastníte.

Často kladené otázky

Může Claude Code číst PDF soubory v mém repozitáři?
Ne pomocí grep. S MCP serverem GroupDocs.Search jej může vyhledávat a citovat lokálně, aniž by je nejprve převáděl.

Funguje to také v Cursor a VS Code?
Ano. Použijte stejné argumenty docker run v .cursor/mcp.json nebo .vscode/mcp.json; VS Code může připojit ${workspaceFolder}.

Bude index skončit v mých commitech?
Jen pokud to povolíte. Přidejte .groupdocs-search-index/ do .gitignore.

Ponořte se hlouběji