“Qual de nossos contratos tem uma penalidade de rescisão?” parece um trabalho para um agente de IA, e é, mas não lendo os contratos. Um agente que abre cada arquivo para responder gasta seu contexto em 297 documentos irrelevantes e ainda precisa confiar que notou a cláusula nos outros três. Com o GroupDocs.Search.Mcp rodando localmente em Docker, Claude Desktop, Cursor ou Copilot indexa a pasta uma vez, pergunta ao índice quais contratos correspondem e lê apenas as cláusulas:

Quais dos meus contratos mencionam uma penalidade de rescisão? Cite a cláusula para cada um.

A versão passo a passo com configuração e solução de problemas está na documentação: Como fazer perguntas em uma pasta de contratos com um agente de IA.

O que dá errado quando o agente lê tudo?

Três coisas, em ordem crescente de perigo. É lento e caro: cada contrato passa pela janela de contexto, toda vez que você pergunta. Fica sem espaço: após algumas dezenas de documentos longos, os primeiros caem da janela ou são resumidos, e um resumo é onde uma cláusula desaparece. E falha silenciosamente: “Encontrei dois contratos com uma penalidade de rescisão” soa igual se o agente verificou todos os 300 ou leu rapidamente 40. Nada na resposta indica quais.

Um índice elimina o primeiro problema e expõe o terceiro. A pergunta “quais arquivos contêm essas palavras” tem uma resposta exata, e uma ferramenta de busca a devolve com uma contagem que você pode verificar.

Como deve ser a sequência correta?

Indexe uma vez, pesquise, então leia as correspondências. Aqui está o que o servidor retornou em nosso teste, contra cinco contratos sintéticos: dois com cláusula de penalidade, e um NDA que menciona ambas as palavras mas exclui a penalidade.

-> add_to_index {"documentsPath":"contracts","indexName":"contracts"}
<- Indexado 'contracts' no índice 'contracts': 5 documento(s) adicionado(s),
   5 no índice.

-> search {"query":"termination penalty","indexName":"contracts"}
<- { "documentsFound": 0,
     "hint": "Palavras não citadas separadas por espaços não correspondem. Pesquise a frase como \"termination penalty\", ou combine as palavras com AND / OR, por exemplo termination AND penalty." }

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

O que os três resultados ensinam?

A primeira consulta falhou, e o servidor explicou o motivo. No GroupDocs.Search, palavras separadas por espaços sem aspas não correspondem como frase. Em vez de retornar apenas zero, o servidor anexa um hint explicando a correção, e os agentes se corrigem na chamada seguinte. Essa é a falha mais comum na primeira tentativa, e é tratada na própria resposta.

AND encontrou três, a frase encontrou duas. AND é avaliado por documento. O NDA da Initech contém ambas as palavras na frase “There is no fee and no penalty associated with termination of this NDA”. Um modelo que lê apenas o resultado da busca contaria; ao ler a passagem, ele relata o NDA separadamente como um contrato que exclui explicitamente a penalidade. Essa distinção é todo o valor da terceira chamada.

Os formatos não importaram. As correspondências vieram de um PDF e um DOCX, e um contrato TXT estava no mesmo índice. O mecanismo indexa 82 formatos, então uma pasta que cresceu ao longo de dez anos com diferentes ferramentas responde a uma única consulta.

As chamadas, em ordem

user              agent                         Search MCP server
 |  "Quais contratos mencionam uma penalidade de rescisão?"           |
 |---------------->|                                           |
 |                 |-- add_to_index (once) ------------------>|
 |                 |-- search {"query":"termination AND       |
 |                 |           penalty"} -------------------->|
 |                 |<- 3 files --------------------------------|
 |                 |-- get_text_fragments {"query":           |
 |                 |   "\"termination penalty\""} ----------->|
 |                 |<- as duas cláusulas, com contexto ----------|
 |<- "Acme: 3 taxas mensais (12,3). Globex: 50% das taxas restantes. Initech NDA: explicitamente sem penalidade."               |

Após a primeira indexação, cada nova pergunta custa duas chamadas independentemente de quantos contratos existam. “Quais contratos têm uma cláusula de força maior?” é "force majeure". “Quais locações renovam automaticamente?” é renewal OR renews, e a passagem diz “renova automaticamente por 12 meses a menos que aviso seja dado”. Uma cláusula sobre períodos de aviso é terminat? AND notice, onde o ? representa um caractere e corresponde a terminate.

Onde o ser humano permanece no ciclo

Isto não é revisão de contrato, e não deve fingir ser. O índice encontra e cita o texto; o agente resume o que citou. Dois hábitos mantêm a honestidade. Peça a citação com cada afirmação, para que um resumo errado fique visível ao lado da frase que foi mal interpretada. E peça também as quase correspondências, “liste contratos que mencionam as palavras sem a cláusula”, porque nesses casos o julgamento do leitor é o mais importante.

Limites honestos

  • No modo de avaliação, um índice contém no máximo 100 documentos e uma busca retorna no máximo 10, e cada resposta informa isso. Chame get_license_status antes de uma execução real, porque uma resposta limitada parece completa.
  • Contratos escaneados sem camada de texto são indexados apenas pelas propriedades do arquivo; não há OCR.
  • A busca em texto completo corresponde a palavras: um agente precisa usar o vocabulário do contrato, ou tentar variantes.
  • Remover um arquivo de uma pasta indexada não é suportado; remova a pasta e adicione novamente o que desejar.

Perguntas Frequentes

Um agente de IA pode pesquisar todos os meus contratos sem enviá-los?
Sim. O índice é construído e pesquisado em um contêiner na sua máquina; apenas as cláusulas que o agente cita chegam ao modelo.

Quantos contratos ele pode lidar?
Licenciado, quantos o seu disco e memória permitirem; o índice é construído uma vez e atualizado incrementalmente. O modo de avaliação para em 100 por índice.

Por que minha busca por duas palavras não retornou nada?
Palavras não citadas não correspondem como frase. Cite-as, "termination penalty", ou una as palavras com AND; o hint do servidor diz o mesmo.

Aprofunde-se