Frequentemente, não. Para uma pasta de contratos, relatórios ou e‑mail, um agente de IA com uma ferramenta de pesquisa de texto completo encontra os arquivos corretos, lê apenas as passagens correspondentes e as cita, e o índice é executado localmente sem modelo de incorporação e sem armazenamento vetorial. GroupDocs.Search.Mcp fornece ao Claude Desktop, Claude Code, Cursor ou Copilot essa ferramenta em um único comando Docker:

Indexe a pasta de contratos, então me diga quais contratos mencionam uma penalidade de rescisão e cite a cláusula.

A versão passo a passo com configuração e solução de problemas está na documentação: Como pesquisar documentos com agentes de IA usando MCP.

Por que todo mundo recorre primeiro às incorporações?

Porque a “geração aumentada por recuperação” chegou como uma receita: dividir os documentos em fragmentos, incorporar cada fragmento, armazenar os vetores, incorporar a pergunta, pegar os fragmentos mais próximos e colá‑los no prompt. Funciona, e para perguntas formuladas de forma muito diferente dos documentos é a ferramenta certa. Mas é um pipeline com um modelo de incorporação para chamar, um armazenamento para executar, fragmentação para ajustar e um trabalho de re‑incorporação toda vez que os documentos mudam. Para “quais dos meus 300 contratos mencionam uma penalidade de rescisão”, essa maquinaria responde a uma pergunta que um índice de pesquisa responde diretamente.

A evidência alcançou a intuição. Um estudo publicado no arXiv no final de 2025 (Keyword search is all you need) deu a um agente nada além de busca por palavra‑chave e regex em uma pasta e mediu isso contra um pipeline RAG padrão: mais de 90 % das pontuações RAG, sem banco de dados vetorial, e mais adequado a coleções que mudam frequentemente. Agentes de codificação já haviam mostrado o padrão na prática: eles buscam com grep, refinam e buscam novamente.

O que o agente faz em vez disso?

Três chamadas. GroupDocs.Search.Mcp expõe oito ferramentas; o loop precisa de três delas:

user              agent                         Search MCP server
 |  "Quais contratos mencionam uma penalidade de rescisão?"           |
 |---------------->|                                           |
 |                 |-- add_to_index ------------------------->|  lê o
 |                 |   {"documentsPath":"contracts",           |  arquivos uma vez,
 |                 |    "indexName":"contracts"}               |  armazena o texto
 |                 |<- "5 documento(s) adicionado(s), 5 no índice" --|
 |                 |-- search ------------------------------->|
 |                 |   {"query":"termination AND penalty"}     |
 |                 |<- {"documentsFound":3, "documents":[ ... |  quais arquivos
 |                 |-- get_text_fragments ------------------->|
 |                 |   {"query":"\"termination penalty\""}     |
 |                 |<- === contracts/acme-...-agreement.pdf ===|  as passagens
 |<- "Dois contratos contêm uma: Acme (3 taxas mensais, 12,3),    |
 |    Globex (50% das taxas restantes). Initech a exclui."|

add_to_index lê os arquivos uma vez e mantém o texto em um índice nomeado no disco. search devolve os arquivos correspondentes como JSON com contagens de ocorrências. get_text_fragments devolve cada correspondência com algumas palavras de contexto, de modo que o agente cita a cláusula em vez de carregar o contrato inteiro.

Aqui está o que o servidor realmente retornou em nosso teste, contra cinco contratos sintéticos:

-> 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)) ===
     …uma penalidade de rescisão de três taxas mensais se aplica, pagável
     dentro de 30…
   === contracts/globex-consulting-agreement.docx (1 occurrence(s)) ===
     …Penalidade de rescisão antecipada: o Cliente paga 50 por cento das taxas…

Observe o terceiro contrato. O NDA da Initech correspondeu a termination AND penalty porque diz “não há taxa e nem penalidade associada à rescisão”. A passagem é o que diferencia uma correspondência de uma mera menção, e um agente que lê as passagens indica isso. Isso é fundamentação: cada afirmação na resposta aponta para um arquivo e uma frase que você pode abrir.

Onde cada abordagem vence?

Pipeline de incorporação               Pesquisa de texto completo agente
-------------------------------------    -------------------------------------
dividir, incorporar, armazenar em um armazenamento vetorial    add_to_index: um índice local de texto completo
incorporar a pergunta, pegar os k fragmentos principais    agente busca, refina, busca novamente
colar os fragmentos no prompt                               get_text_fragments: passagens citadas
reincorporar quando os documentos mudam                    update_index relê o que mudou
necessita de um modelo de incorporação e um armazenamento   sem chamadas de modelo, sem rede em tempo de execução
corresponde ao significado; classificação é opaca          corresponde a palavras; cada acerto é explicável

A pesquisa de texto completo perde quando a pergunta e o documento não compartilham palavras: “quais contratos são arriscados para nós?” não tem palavra‑chave. Ela vence quando o vocabulário é compartilhado, o que descreve a maioria das perguntas que as pessoas fazem sobre seus próprios documentos: o nome de uma cláusula, um produto, um cliente, um número de fatura, um intervalo de datas. Quando uma consulta falha, o agente tenta renewal OR renews, ou uma correspondência difusa, como uma pessoa faria. O servidor ajuda: uma consulta de duas palavras sem aspas não corresponde a nada no GroupDocs.Search, e o resultado vazio traz um hint que indica ao agente citar a frase.

Qual ferramenta para qual pergunta?

O usuário pergunta O agente chama
“Indexe esta pasta” add_to_index
“Quais arquivos mencionam X?” search
“O que diz sobre X?” get_text_fragments
“Arquivos alterados, atualizar” update_index
“Esqueça a pasta de rascunhos” remove_from_index
“O que está no índice?” get_index_info
“Iniciar um índice separado” create_index
“Por que apenas 10 resultados?” get_license_status

O índice entende 82 formatos, incluindo PDF, Office, OpenDocument, HTML e arquivos de e‑mail (PST, OST, MSG, EML) com seus anexos.

Como executá‑lo?

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 com GitHub Copilot e os outros clientes usam o mesmo contêiner em seu próprio arquivo de configuração: Registrar em clientes de IA. No Linux adicione --user "$(id -u):$(id -g)" para que o contêiner possa gravar seu índice na sua pasta. O servidor executa o mecanismo GroupDocs.Search 26.10, cujo novo formato de índice torna os índices menores e reduz aproximadamente à metade o uso de memória (notas de lançamento).

Limitações honestas

  • No modo de avaliação, um índice contém no máximo 100 documentos e uma pesquisa retorna no máximo 10; cada resposta indica isso. Chame get_license_status primeiro.
  • É pesquisa de texto completo, não pesquisa semântica: corresponde a palavras, não ao significado.
  • Sem OCR: PDFs escaneados sem camada de texto são indexados apenas por suas propriedades de arquivo.
  • É distribuído apenas como imagem Docker (a ferramenta empacotada ultrapassa o limite de tamanho do NuGet).

Perguntas Frequentes

Claude pode pesquisar meus documentos locais sem enviá‑los?
Sim. O servidor roda em um contêiner na sua máquina e lê a pasta que você monta; somente as passagens que o agente cita chegam ao modelo.

Isso é RAG?
É recuperação aumentada, mas agente: o modelo decide o que buscar e quando tem o suficiente, usando um índice de texto completo em vez de incorporações.

O que acontece quando meus documentos mudam?
Peça ao agente para atualizar. update_index relê apenas os arquivos alterados, adicionados e excluídos.

Aprofunde-se