<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Enrico Zimuel - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Enrico Zimuel - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/pt/search-labs/author/enrico-zimuel</link>
    </image>
    <link>https://www.elastic.co/pt/search-labs/author/enrico-zimuel</link>
    <atom:link href="https://www.elastic.co/pt/search-labs/rss/author/enrico-zimuel.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[pt]]></language>
    <lastBuildDate>Mon, 14 Sep 2026 23:54:24 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Como criar aplicações de IA agentiva com Mastra e Elasticsearch]]></title>
    <description><![CDATA[Aprenda como construir aplicações de IA agentiva usando Mastra e Elasticsearch com um exemplo prático.]]></description>
    <content:encoded><![CDATA[<p>Neste artigo, vamos mostrar como usar o framework <a href="https://mastra.ai/">Mastra</a> TypeScript para criar aplicações agentivas que interagem com <a href="https://www.elastic.co/elasticsearch">Elasticsearch</a>.</p><p>Recentemente, contribuímos para o projeto open source <a href="https://github.com/mastra-ai/mastra">mastra-ai/mastra</a> adicionando suporte ao Elasticsearch como banco de dados vetorial. Com esse novo recurso, você pode usar o Elasticsearch nativamente no Mastra para armazenar embeddings. Além dos vetores, o Elasticsearch oferece um conjunto de recursos avançados para atender a todos os seus requisitos de engenharia de contexto. (por exemplo, <a href="https://www.elastic.co/search-labs/blog/context-engineering-hybrid-search-evolution-agentic-ai">busca híbrida e reranking</a>).</p><p>Este artigo detalha a criação de um agente para implementar uma arquitetura de retrieval augmented generation (RAG) usando o Elasticsearch. Vamos apresentar um projeto de demonstração onde uma abordagem agentiva é usada para interagir com um corpus de dados de filmes de ficção científica armazenados no Elasticsearch. O projeto está disponível em <a href="https://github.com/elastic/mastra-elasticsearch-example">elastic/mastra-elasticsearch-example</a>.</p><h2>Mastra</h2><p>Mastra é um framework TypeScript para criar aplicações de IA com agentes.</p><p>A estrutura do projeto em Mastra é a seguinte:</p>src/
├── mastra/
│   ├── agents/
│   │   └── weather-agent.ts
│   ├── tools/
│   │   └── weather-tool.ts
│   ├── workflows/
│   │   └── weather-workflow.ts
│   ├── scorers/
│   │   └── weather-scorer.ts
│   └── index.ts
├── .env.example
├── package.json
└── tsconfig.json<p>No Mastra, você pode criar <a href="https://mastra.ai/docs/agents/overview">agentes</a>, <a href="https://mastra.ai/docs/agents/using-tools">ferramentas</a>, <a href="https://mastra.ai/docs/workflows/overview">fluxos de trabalho</a> e <a href="https://mastra.ai/docs/evals/overview">métricas</a>.</p><p>Um <strong>agente</strong> é uma classe que aceita uma mensagem na entrada e produz uma resposta como saída. Um agente pode usar ferramentas, grandes modelos de linguagem (LLMs) e uma memória (figura 1).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0f7484f7501997dc/6a170417cdacbffb5a7d28f6/f6aca2dcc7fcc45d25e06681649be1b2b7eb6781-706x721.png" alt="Um diagrama que mostra o funcionamento de um agente no Mastra." /><p>As <strong>ferramentas</strong> de um agente permitem que ele interaja com o "mundo externo", como se comunicar com uma API web ou realizar uma operação interna, como consultar o Elasticsearch. O componente de <strong>memória</strong> é essencial para armazenar o histórico das conversas, incluindo entradas e saídas anteriores. Esse contexto armazenado permite que o agente forneça respostas mais informadas e relevantes para futuras perguntas utilizando suas interações passadas.</p><p>Os <strong>fluxos de trabalho</strong> permitem que você defina sequências complexas de tarefas usando etapas claras e estruturadas, em vez de depender do raciocínio de um único agente (figura 2). Eles dão controle total sobre como as tarefas são divididas, como os dados circulam entre elas e o que é executado e quando. Os fluxos de trabalho são executados usando o mecanismo de execução integrado por padrão ou podem ser implantados em <a href="https://mastra.ai/docs/deployment/workflow-runners">executores de fluxo de trabalho</a>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd82ea661569e1018/6a170419dc55de3adde00cc9/0dce161cf7891207015dc87532b5b90df1822432-880x252.png" alt="Um exemplo de fluxo de trabalho no Mastra." /><p>No Mastra, você também pode definir métricas, que são testes automatizados para avaliar as saídas dos agentes usando métodos baseados em modelos, regras e estatísticas. Os avaliadores retornam <em>métricas</em>: valores numéricos (normalmente entre 0 e 1) que quantificam o quanto uma saída atende aos seus critérios de avaliação. Essas métricas permitem que você acompanhe objetivamente o desempenho, compare diferentes abordagens e identifique áreas de melhoria em seus sistemas de IA. Os avaliadores podem ser personalizados com seus próprios prompts e funções de métrica.</p><h2>Elasticsearch</h2><p>Para executar o projeto de demonstração, precisamos ter uma instância do Elasticsearch em execução. Você pode ativar um teste gratuito no <a href="https://www.elastic.co/cloud">Elastic Cloud</a> ou instalá-lo localmente usando o script <a href="https://github.com/elastic/start-local"><code>start-local</code></a>:</p>curl -fsSL https://elastic.co/start-local | sh<p>Isso instalará o Elasticsearch e o Kibana no seu computador e gerará uma chave API para ser usada na configuração da integração Mastra.</p><p>A chave API será mostrada como saída do comando anterior e armazenada em um arquivo <strong>.env</strong> na pasta elastic-start-local.</p><h2>Instalar e configurar a demonstração</h2><p>Criamos um repositório <a href="https://github.com/elastic/mastra-elasticsearch-example">elastic/mastra-elasticsearch-example</a> contendo o código-fonte do projeto de demonstração. O exemplo relatado no repositório ilustra como criar um agente no Mastra que implementa uma arquitetura RAG para recuperar documentos do Elasticsearch.</p><p>Fornecemos um conjunto de dados para a demonstração sobre filmes de ficção científica. Extraímos 500 filmes do conjunto de dados IMDb no <a href="https://www.kaggle.com/datasets/rajugc/imdb-movies-dataset-based-on-genre/versions/2?select=scifi.csv">Kaggle</a>.</p><p>O primeiro passo é instalar as dependências do projeto com npm, usando o seguinte comando:</p>npm install<p>Então precisamos configurar o arquivo <strong>.env</strong> que conterá as configurações. Podemos gerar esse arquivo copiando a estrutura do arquivo <strong>.env.example</strong>, usando o seguinte comando:</p>cp .env.example .env<p>Agora podemos editar o arquivo .env, adicionando as informações que faltam:</p>OPENAI_API_KEY=
ELASTICSEARCH_URL=
ELASTICSEARCH_API_KEY=
ELASTICSEARCH_INDEX_NAME=scifi-movies<p>O nome do índice do Elasticsearch é <strong><code>scifi-movies</code></strong>. Se quiser, pode mudar usando a variável de ambiente <code>ELASTICSEARCH_INDEX_NAME</code>.</p><p>Usamos a OpenAI como serviço de embeddings, o que significa que você precisa fornecer uma chave de API para a OpenAI na variável de ambiente <code>OPENAI_API_KEY</code>.</p><p>O modelo de embedding usado no exemplo é <a href="https://developers.openai.com/api/docs/models/text-embedding-3-small">openai/text-embedding-3-small</a>, com uma dimensão de embedding de 1.536.</p><p>Para gerar a resposta final, utilizamos o modelo <a href="https://developers.openai.com/api/docs/models/gpt-5-nano">openai/gpt-5-nano</a> para reduzir os custos.</p><p>A arquitetura RAG permite que você use um modelo LLM final menos potente (e normalmente mais barato) porque o trabalho pesado de fundamentar a resposta é feito pelo componente de recuperação (Elasticsearch, neste caso).</p><p>O LLM menor é responsável apenas por duas tarefas principais:</p><ul><li><p><strong>Reformulação/embedding da consulta:</strong> conversão da pergunta do usuário em linguagem natural em um vetor de embedding para busca semântica.</p></li><li><p><strong>Sintetização da resposta:</strong> pegar os fragmentos de contexto recuperados e altamente relevantes (documentos/filmes) e sintetizá-los em uma resposta coerente, final e legível por humanos, seguindo as instruções do prompt fornecido.</p></li></ul><p>Como o processo RAG <strong>fornece o contexto factual exato</strong> necessário para a resposta, o LLM final não precisa ser massivo ou altamente complexo, nem precisa possuir todo o conhecimento necessário dentro de seus próprios parâmetros (é aí que modelos grandes e caros se destacam). Basicamente, ele atua como um sofisticado resumidor e formatador de texto para o contexto fornecido pelo Elasticsearch, e não como uma base de conhecimento completa em si. Isso permite o uso de modelos como <code>gpt-5-nano</code> para otimização de custos e latência.</p><p>Após a configuração do arquivo .env, você pode fazer a ingestão dos filmes no Elasticsearch usando o seguinte comando:</p>npx tsx src/utility/store.ts<p>Você deve ver uma saída da seguinte forma:</p>🚀 Starting ingestion of 500 movies from 500_scifi_movies.jsonl...
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 1/500 (0%) | ok:1 | fail:0 | chunks:1 | eta:19m 33s | current:Capricorn One
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 2/500 (0%) | ok:2 | fail:0 | chunks:2 | eta:10m 32s | current:Doghouse
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 3/500 (1%) | ok:3 | fail:0 | chunks:3 | eta:7m 33s | current:Dinocroc
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 4/500 (1%) | ok:4 | fail:0 | chunks:7 | eta:6m 10s | current:Back to the Future           
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 5/500 (1%) | ok:5 | fail:0 | chunks:9 | eta:5m 14s | current:The Projected Man            
Ingesting ░░░░░░░░░░░░░░░░░░░░░░░░ 6/500 (1%) | ok:6 | fail:0 | chunks:11 | eta:4m 41s | current:I, Robot
...
✅ Ingestion complete in 1m 46s. Success: 500, Failed: 0, Chunks: 693.<p>O mapeamento do índice de filmes de ficção científica contém os seguintes campos:</p><ul><li><p><strong>embedding</strong>, dense_vector com dimensão de 1.536, similaridade cosseno.</p></li><li><p><strong>description</strong>, texto contendo a descrição do filme.</p></li><li><p><strong>director</strong>, texto contendo o nome do diretor.</p></li><li><p><strong>título</strong>, texto contendo o título do filme.</p></li></ul><p>Geramos os embeddings usando o título e a descrição. Como o título e a descrição são dois campos separados, a concatenação de ambos garante que o vetor de embedding resultante capture tanto a identidade específica e única (título) quanto o contexto rico e descritivo (descrição) do filme, resultando em buscas semânticas mais precisas e abrangentes. Essa entrada combinada oferece ao modelo de embedding uma representação mais adequada do conteúdo do documento para comparação de similaridade.</p><h2>Execute a demonstração</h2><p>Você pode executar a demonstração com o seguinte comando:</p>npm run dev<p>Esse comando iniciará uma aplicação web em <strong>localhost:4111</strong> para acessar o Mastra Studio (Figura 3).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8a539df677a33b36/6a17041a47d49c36842d88a0/1567e309df21a12bcf1dfef4429f82342549956c-1705x1079.png" alt="Uma captura de tela do Mastra Studio com o exemplo do agente Elasticsearch." /><p>O <a href="https://mastra.ai/docs/getting-started/studio">Mastra Studio</a> oferece uma interface de usuário interativa para criar e testar seus agentes, além de uma REST API que expõe seu aplicativo Mastra como um serviço local. Isso permite que você comece a trabalhar imediatamente, sem se preocupar com integração.</p><p>Fornecemos um <strong>Agente Elasticsearch</strong> que utiliza <a href="https://mastra.ai/reference/tools/vector-query-tool">o createVectorQueryTool</a> da Mastra como ferramenta para executar busca semântica usando Elasticsearch. Esse agente utiliza a abordagem RAG para buscar documentos relevantes (ou seja, filmes) para responder à pergunta do usuário.</p><p>Este agente usa o seguinte prompt:</p>You are a helpful assistant that answers questions based on the provided context.
Follow these steps for each response:

1. First, carefully analyze the retrieved context chunks and identify key information.
2. Break down your thinking process about how the retrieved information relates to the query.
3. Draw conclusions based only on the evidence in the retrieved context.
4. If the retrieved chunks don't contain enough information, explicitly state what's missing.

Format your response as:
THOUGHT PROCESS:
- Step 1: [Initial analysis of retrieved chunks]
- Step 2: [Reasoning based on chunks]

FINAL ANSWER:
[Your concise answer based on the retrieved context]

Important: When asked to answer a question, please base your answer only on the context provided in the tool. 
If the context doesn't contain enough information to fully answer the question, please state that explicitly and stop it.
Do not add more information than what is present in the retrieved chunks.
Remember: Explain how you're using the retrieved information to reach your conclusions.<p>Se você clicar no menu <code>Mastra Studio &gt; Agents</code> e selecionar <strong>Agente Elasticsearch</strong>, pode testar o agente usando um sistema de chat. Por exemplo, você pode pedir informações sobre filmes de ficção científica com a seguinte pergunta:</p><p><em>Encontre 5 filmes ou séries de TV sobre OVNIs</em>.</p><p>Você notará que o agente executará a ferramenta vectorQueryTool. Você pode clicar na ferramenta invocada para visualizar a entrada e a saída. Ao final da execução, o LLM responderá à sua pergunta, considerando o contexto do índice de filmes de ficção científica do Elasticsearch (figura 4).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltda92a9b6e56528d3/6a17041c2b835f9724f4b0d6/d9998d4f687984de98845dae52d1288166abf448-1344x1071.png" alt=" Resposta do LLM usando o Agente Elasticsearch." /><p>O Mastra executa internamente os seguintes passos:</p><ol><li><p><strong>Conversão de vetor:</strong> A pergunta do usuário, <em>Encontre 5 filmes ou séries de TV sobre OVNIs,</em> é convertida em uma incorporação vetorial usando o modelo <code>openai/text-embedding-3-small</code> da OpenAI.</p></li><li><p><strong>Busca vetorial:</strong> este embedding é então usado para consultar o Elasticsearch por meio de uma busca vetorial.</p></li><li><p><strong>Recuperação do resultado:</strong> o Elasticsearch retorna um conjunto de 10 filmes altamente relevantes para a consulta (ou seja, aqueles cujos vetores estão mais próximos do vetor de consulta do usuário).</p></li><li><p><strong>Geração de respostas:</strong> os filmes recuperados e a pergunta original do usuário são enviados para o LLM, especificamente <code>openai/gpt-5-nano</code>. O LLM processa essas informações e gera uma resposta final, garantindo que o pedido do usuário por cinco resultados seja atendido.</p></li></ol><h2>O Agente Elasticsearch</h2><p>Aqui apresentamos o código-fonte do agente Elasticsearch.</p>import { Agent } from "@mastra/core/agent";
import { ElasticSearchVector } from '@mastra/elasticsearch';
import { createVectorQueryTool } from '@mastra/rag';
import { ModelRouterEmbeddingModel } from "@mastra/core/llm";
import { Memory } from "@mastra/memory";

const es_url = process.env.ELASTICSEARCH_URL;
const es_apikey = process.env.ELASTICSEARCH_API_KEY;
const es_index_name = process.env.ELASTICSEARCH_INDEX_NAME;
const prompt = 'insert here the previous prompt';

const esVector = new ElasticSearchVector({
  id: 'elasticsearch-vector',
  url: es_url,
  auth: {
    apiKey : es_apikey
  }
});

const vectorQueryTool = createVectorQueryTool({
  vectorStore: esVector,
  indexName: es_index_name,
  model: new ModelRouterEmbeddingModel("openai/text-embedding-3-small")
});

export const elasticsearchAgent = new Agent({
  id: "elasticsearch-agent",
  name: "Elasticsearch Agent",
  instructions: prompt,
  model: 'openai/gpt-5-nano',
  tools: { vectorQueryTool },
  memory: new Memory(),
});<p>O <strong>vectorQueryTool</strong> é a ferramenta que é invocada para implementar a parte de recuperação do exemplo RAG. Ele utiliza a implementação <a href="https://mastra.ai/reference/vectors/elasticsearch">ElasticSearchVector</a> que a Elastic contribuiu para o Mastra.</p><p>O agente é um objeto da classe agent que utiliza o vectorQueryTool, o prompt e uma memória. Como você pode ver, o código que precisamos colocar em prática para conectar o Elasticsearch a um agente é mínimo.</p><h2>Conclusão</h2><p>Este artigo demonstrou a simplicidade e o poder de integrar o Elasticsearch ao framework Mastra para criar aplicações sofisticadas de IA agentiva. Especificamente, detalhamos a criação de um agente RAG capaz de realizar busca semântica em um corpus de dados de filmes de ficção científica indexados no Elasticsearch.</p><p>O principal aprendizado é a contribuição direta da Elastic para o projeto open source Mastra, fornecendo suporte nativo para o Elasticsearch como um repositório vetorial. Essa integração reduz significativamente a barreira de entrada, como demonstra o código-fonte do <strong>Elasticsearch Agent</strong>. Usando o <code>ElasticSearchVector</code> e <code>createVectorQueryTool</code>, a configuração completa para conectar o Elasticsearch ao seu agente exige apenas algumas linhas de código de configuração.</p><p>O Elasticsearch oferece vários recursos avançados para aumentar a relevância dos resultados. Por exemplo, a <a href="https://www.elastic.co/elasticsearch/hybrid-search">busca híbrida</a> aumenta significativamente a precisão ao combinar a busca lexical com a busca vetorial. Outro recurso interessante é a reclassificação usando os <a href="https://www.elastic.co/search-labs/tutorials/jina-tutorial/jina-reranker-v3">modelos Jina</a> mais recentes, que podem ser aplicados ao final da busca híbrida. Para saber mais sobre essas técnicas, consulte os seguintes artigos do Elasticsearch Labs:</p><ul><li><p><a href="https://www.elastic.co/search-labs/blog/hybrid-search-elasticsearch">Busca híbrida do Elasticsearch</a> por Valentin Crettaz</p></li><li><p><a href="https://www.elastic.co/search-labs/blog/jina-models-elasticsearch-guide">Uma introdução aos modelos Jina, sua funcionalidade e seus usos no Elasticsearch</a> por Scott Martens</p></li></ul><p>Também incentivamos você a explorar o exemplo fornecido e começar a construir seus próprios agentes baseados em dados com Mastra e Elasticsearch. Para mais informações sobre o Mastra, você pode consultar a documentação oficial <a href="https://mastra.ai/docs">aqui</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/build-agentic-ai-applications-mastra-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/build-agentic-ai-applications-mastra-elasticsearch</guid>
    <category><![CDATA[IA Agêntica]]></category>
    <dc:creator><![CDATA[Enrico Zimuel]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt083181bab7c0e2d0/6a17041eacf0880b70be99f5/ab30baf2f908534840c5d71a46705773807baf54-1280x720.png" length="0" type="image/png"/>
    <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[A extensão Gemini CLI para Elasticsearch com ferramentas e recursos]]></title>
    <description><![CDATA[Apresentamos a extensão da Elastic para a CLI Gemini do Google, que permite buscar, extrair e analisar dados do Elasticsearch em fluxos de trabalho de desenvolvedores e agentes.
]]></description>
    <content:encoded><![CDATA[<p>Temos a satisfação de anunciar o lançamento da nossa extensão Elastic para a Gemini CLI do Google, trazendo toda a eficiência da <a href="https://www.elastic.co/elasticsearch">Elasticsearch</a> e <a href="https://www.elastic.co/elasticsearch/agent-builder">Elastic Agent Builder</a> diretamente para o seu fluxo de trabalho de desenvolvimento de IA. Essa extensão também oferece várias habilidades de agente recentemente desenvolvidas para interagir com o Elasticsearch.</p><p>A extensão está disponível como um projeto open source <a href="https://github.com/elastic/gemini-cli-elasticsearch">aqui</a>.</p><h2>O que é a Gemini CLI e como você a instala?</h2><p><a href="https://geminicli.com/">Gemini CLI</a> é um agente de IA open source que traz os modelos Gemini do Google diretamente para a linha de comando. Ele permite que os desenvolvedores interajam com a IA a partir do terminal para realizar tarefas como gerar código, editar arquivos, executar comandos do shell e recuperar informações da web.</p><p>Diferentemente das interfaces típicas de chat, a Gemini CLI se integra ao seu ambiente local de desenvolvimento, o que significa que ela pode entender o contexto do projeto, modificar arquivos, executar builds ou testes e automatizar fluxos de trabalho diretamente no terminal. Isso a torna útil para desenvolvedores, engenheiros de confiabilidade de sites (SREs) e outros profissionais que desejam codificação e automação assistidas por IA sem sair do fluxo de trabalho da linha de comando.</p><p>Você pode instalar a Gemini CLI usando vários gerenciadores de pacotes. O método mais comum é usar o npm:</p>npm install -g @google/gemini-cli<p>Para conhecer opções alternativas de instalação, consulte a <a href="https://geminicli.com/docs/get-started/installation/">página oficial de instalação</a>.</p><p>Após a instalação, inicie a CLI executando:</p>gemini<p>Você vê uma tela, conforme mostrado na Figura 1:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4ff43abe550941b4/6a17072ba29299fc2ad00fa4/6dfcec4a77b3dc83bf0d974417bf2e211abb1f4f-876x468.png" alt="Uma captura de tela da Gemini CLI." /><h2>Configurar o Elasticsearch</h2><p>Precisamos ter uma instância do Elasticsearch em execução. Se quiser usar o servidor MCP (Model Context Protocol), você também precisará ter o Kibana 9.3+ instalado. Para usar a habilidade da Elasticsearch linguagem de consulta (ES|QL) (<code>esql</code>) descrita abaixo, o Kibana não é necessário.</p><p>Você pode ativar um teste gratuito no <a href="https://www.elastic.co/cloud">Elastic Cloud</a> ou instalá-lo localmente usando o script <a href="https://github.com/elastic/start-local"><code>start-local</code></a> :</p>curl -fsSL https://elastic.co/start-local | sh<p>Isso instalará o Elasticsearch e o Kibana no seu computador e gerará uma chave API para ser usada na configuração da Gemini CLI.</p><p>A chave API será mostrada como saída do comando anterior e armazenada em um <strong>.env</strong> arquivo na pasta <strong><code>elastic-start-local</code></strong>.</p><p>Se você está usando o Elasticsearch no local (por exemplo, usando <code>start-local</code>), e quer usar o Elastic Agent Builder com MCP, também precisa conectar um grande modelo de linguagem (LLM). Você pode ler <a href="https://www.elastic.co/docs/explore-analyze/ai-features/llm-guides/llm-connectors">esta página de documentação</a> para entender as diferentes opções.</p><p>Se você estiver usando o Elastic Cloud (ou serverless), já tem uma conexão LLM pré-configurada.</p><h2>Instale a extensão do Elasticsearch</h2><p>Você pode instalar a extensão Elasticsearch para Gemini CLI com o seguinte comando:</p>gemini extensions install https://github.com/elastic/gemini-cli-elasticsearch<p>Você pode verificar se as extensões foram instaladas com sucesso abrindo o Gemini e executando o seguinte comando:</p>/extensions list<p>Você deverá ver a extensão Elasticsearch disponível.</p><p>Se quiser usar a integração MCP, precisa ter uma versão do Elasticsearch 9.3+ instalada. Você precisa da URL do seu servidor MCP do <a href="https://www.elastic.co/kibana">Kibana</a>:</p><ul><li><p>Obtenha a URL do seu servidor MCP em Agents &gt; View all tools &gt; Manage MCP &gt; Copy MCP Server URL (Agentes &gt; Ver todas as ferramentas &gt; Gerenciar MCP &gt; Copiar URL do Servidor MCP).</p></li><li><p>A URL ficará assim: https://your-kibana-instance/api/agent_builder/mcp</p></li></ul><p>Você precisa da URL do endpoint do Elasticsearch. Isso normalmente é relatado no topo da página do Kibana Elasticsearch. Se você está rodando o Elasticsearch com <code>start-local</code>, você já tem o endpoint na chave <code>ES_LOCAL_URL</code> no <code>start-local</code> .env. arquivo.</p><p>Também é necessário uma chave de API. Se estiver executando o Elasticsearch com <code>start-local</code>, você já tem a <code>ES_LOCAL_API_KEY</code> no arquivo<code>start-local</code> .env arquivo. Caso contrário, é possível criar uma chave de API usando a interface do Kibana, conforme <a href="https://www.elastic.co/docs/deploy-manage/api-keys/elasticsearch-api-keys">indicado aqui</a>:</p><ul><li><p>No Kibana: Stack Management &gt; Security &gt; API Keys &gt; Create API Key (Stack management &gt; Segurança &gt; Chaves de API &gt; Criar chave de API) .</p></li><li><p>Sugerimos definir apenas os privilégios de leitura para a chave API, habilitando o privilégio <code>feature_agentBuilder.read</code> conforme <a href="https://www.elastic.co/docs/explore-analyze/ai-features/agent-builder/permissions#grant-access-with-roles">reportado aqui</a>.</p></li><li><p>Copie o valor da chave de API codificada.</p></li></ul><p>Defina as variáveis de ambiente necessárias no seu shell:</p>export ELASTIC_URL="your-elasticsearch-url"
export ELASTIC_MCP_URL="your-elasticsearch-mcp-url"
export ELASTIC_API_KEY="your-encoded-api-key"<h2>Instale o conjunto de dados de exemplo</h2><p>Você pode instalar o conjunto de dados de <strong>pedidos de comércio eletrônico </strong>disponível no Kibana. Inclui um único índice chamado <strong><code>kibana_sample_data_ecommerce</code></strong>, contendo informações sobre 4.675 pedidos de um website. Para cada pedido, temos as seguintes informações:</p><ul><li><p>Informações do cliente (nome, ID, data de nascimento, e-mail e mais).</p></li><li><p>Data do pedido.</p></li><li><p>ID do pedido.</p></li><li><p>Produtos (lista de todos os produtos com preço, quantidade, ID, categoria, desconto e outros detalhes).</p></li><li><p>SKU.</p></li><li><p>Preço total (sem impostos, com impostos).</p></li><li><p>Quantidade total.</p></li><li><p>Informações geográficas (cidade, país, continente, localização, região).</p></li></ul><p>Para instalar os dados de exemplo, abra a página <strong>Integrações</strong> no Kibana (busque por “Integração” na barra de busca superior) e instale os <strong>Dados de Exemplo</strong>. Para mais detalhes, consulte a <a href="https://www.elastic.co/docs/explore-analyze/#gs-get-data-into-kibana">documentação aqui</a>.</p><p>O objetivo deste artigo é mostrar como é fácil configurar o Gemini CLI para se conectar ao Elasticsearch e interagir com o índice <strong><code>kibana_sample_data_ecommerce</code></strong>.</p><h2>Como usar o Elasticsearch MCP</h2><p>Você pode verificar a conexão usando o seguinte comando no Gemini:</p>/mcp list<p>Você deve ver o <strong><code>elastic-agent-builder</code></strong> ativado, como mostrado na Figura 2:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt52b85e7255360f3b/6a17072da929cf33d3ae08f5/1508423bc1d1bc3c04a1cb01e2d59495a3516ed1-1465x844.png" alt="O servidor MCP 'elastic-agent-builder' com a lista de ferramentas." /><p>O Elasticsearch fornece um conjunto padrão de ferramentas. Veja a descrição <a href="https://www.elastic.co/docs/explore-analyze/ai-features/agent-builder/tools/builtin-tools-reference">aqui</a>.</p><p>Usando essas ferramentas, você pode interagir com o Elasticsearch, fazendo perguntas como:</p><ul><li><p><code>Give me the list of all the indexes available in Elasticsearch.</code></p></li><li><p><code>How many customers are based in the USA in the kibana_sample_data_ecommerce index of Elasticsearch?</code></p></li></ul><p>Dependendo da pergunta, o Gemini usará uma ou mais ferramentas disponíveis para tentar respondê-la.</p><h2>Os comandos /elastic</h2><p>Na extensão Elasticsearch para Gemini CLI, também adicionamos<strong><code>/elastic</code></strong> comandos.</p><p>Se você executar o comando <strong><code>/help</code></strong>, verá todas as opções de <code>/elastic</code> disponíveis (Figura 3):</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt741c7451ecab10d2/6a17072ea6c2b9ccd6e79643/5b2a0727ce7a04354878dd048253d3f4d062324b-1983x230.png" alt="Os comandos '/elastic' disponíveis." /><p>Esses comandos podem ser úteis se você quiser executar diretamente uma ferramenta específica do servidor MCP.<code>elastic-agent-builder</code>  Por exemplo, usando o seguinte comando, você pode obter o mapeamento do <code>kibana_sample_data_ecommerce</code>:</p>/elastic:get-mapping kibana_sample_data_ecommerce<p>Esses comandos são essencialmente atalhos para executar ferramentas específicas, em vez de depender do modelo Gemini para determinar qual ferramenta deve ser usada.</p><h2>Como usar as habilidades do Elasticsearch</h2><p>Essa extensão também inclui uma <a href="https://github.com/elastic/gemini-cli-elasticsearch/tree/main/skills/esql">habilidade de agente para o ES|QL</a>, a <a href="https://www.elastic.co/docs/explore-analyze/discover/try-esql">Linguagem de Consulta Elasticsearch</a> disponível no Elasticsearch. <a href="https://agentskills.io/home">Agent Skills</a> é um formato aberto que fornece aos agentes de programação de IA, como o Gemini CLI, instruções personalizadas para tarefas específicas. Eles utilizam um conceito chamado <em>divulgação progressiva</em>, o que significa que apenas uma breve descrição da habilidade é adicionada ao prompt inicial do sistema. Quando você solicita que o agente execute uma tarefa, como consultar o Elasticsearch, ele associa a solicitação à habilidade relevante e carrega dinamicamente as instruções detalhadas. Essa é uma forma eficiente de gerenciar orçamentos de tokens enquanto fornece à IA exatamente o contexto que ela precisa.</p><p>A<strong> habilidade</strong> <strong><code>esql</code></strong>foi projetada para permitir que o Gemini CLI escreva e execute consultas ES|QL diretamente no seu cluster. ES|QL é uma poderosa linguagem de consulta encadeada que torna a exploração de dados, a análise de logs e as agregações altamente intuitivas. Com essa habilidade ativada, você não precisa pesquisar a sintaxe ES|QL; basta fazer perguntas em linguagem natural ao Gemini CLI sobre seus dados e o agente cuidará do resto.</p><p>As execuções são realizadas usando simples comandos <a href="https://curl.se/">curl</a> executados em um terminal. Isso é possível porque o Elasticsearch oferece um conjunto abrangente de APIs REST que podem ser facilmente usadas para integrar o sistema a qualquer arquitetura.</p><p><strong>O que a </strong><strong> habilidadeesqloferece:</strong></p><ul><li><p><strong>Descoberta de índices e esquemas:</strong> o agente pode usar as ferramentas integradas da habilidade para listar os índices disponíveis e buscar mapeamentos de campo. Por exemplo, antes de escrever uma consulta para o conjunto de dados de comércio eletrônico, o agente pode executar uma verificação de esquema em <strong><code>kibana_sample_data_ecommerce</code></strong> para entender os campos disponíveis, como <strong><code>taxful_total_price</code></strong> ou <strong><code>category</code></strong>.</p></li><li><p><strong>Tradução perfeita da linguagem natural:</strong> a habilidade dá ao agente mais do que um simples manual de referência; ela fornece um guia específico para interpretar a intenção do usuário. Quando você digita solicitações em linguagem natural, como "Mostrar tempo médio de resposta agrupado por serviço", o agente usa o padrão de correspondência da habilidade para traduzir instantaneamente suas palavras nas agregações, filtros e comandos ES|QL corretos.</p></li><li><p><strong>Autocorreção:</strong> Se uma consulta falhar (por exemplo, devido a uma incompatibilidade de tipo ou erro de sintaxe), a skill retorna a consulta gerada juntamente com a mensagem de erro exata do Elasticsearch, permitindo que o agente corrija instantaneamente a consulta e tente novamente sem que você precise intervir.</p></li></ul><p>Como a habilidade <code>esql</code> também está disponível como ferramenta no servidor MCP <code>elastic-agent-builder</code>, precisamos desativar esse servidor momentaneamente. Você pode usar o seguinte comando para desativá-lo:</p>/mcp disable elastic-agent-builder<p>Em seguida, você pode simplesmente digitar um prompt como esse em sua Gemini CLI:</p>Find the top 5 product categories by total sales revenue in the kibana_sample_data_ecommerce index<p>O agente irá:</p><ul><li><p>Reconheça a necessidade da habilidade <code>esql</code> .</p></li><li><p>Verifique o esquema do <strong><code>kibana_sample_data_ecommerce</code></strong>.</p></li><li><p>Crie uma consulta ES|QL, como: <code>FROM kibana_sample_data_ecommerce | STATS total_revenue = SUM(taxful_total_price) BY category.keyword | SORT total_revenue DESC | LIMIT 5</code>.</p></li><li><p>Execute a consulta na API do Elasticsearch.</p></li><li><p>Apresente a resposta final para você diretamente no terminal.</p></li></ul><p>Aqui, apresentamos um exemplo de resposta do Gemini ao prompt anterior:</p>───────────────────────────────────────────────────────────
&gt; Find the top 5 product categories by total sales revenue in the kibana_sample_data_ecommerce index   ───────────────────────────────────────────────────────────
✓  Activate Skill "esql": Interact with Elasticsearch using ES|QL and curl. Use when querying, managing indices,  …
Skill esql activated. Resources loaded from /home/user/.gemini/extensions/elasticsearch/skills/esql: 
Showing up to 200 items (files + folders).                                                                     /home/user/.gemini/extensions/elasticsearch/skills/esql/                                                            ├───SKILL.md 
└───references/
├───esql-reference.md 
├───generation-tips.md 
└───query-patterns.md

✦ I will start by exploring the mapping of the kibana_sample_data_ecommerce index to identify the fields for product category and sales revenue. Then, I will construct and execute an ES|QL query to determine the top 5 product categories by total sales revenue.

✓  Shell curl -s "${ELASTIC_URL%/}/kibana_sample_data_ecommerce/_mapping" -H "Authorization: ApiKey $(printenv ELAS…                                                                                                                       {  
   "kibana_sample_data_ecommerce": { 
     "mappings": { 
       "properties": {
         "category": { 
           "type": "text", 
           "fields": {
             "keyword": {
               "type": "keyword"
             }
           }
         }, 
         "currency": {
           "type": "keyword"
         }, 

✦ Okay, I have the mapping. The category is products.category.keyword and sales revenue is taxful_total_price. I'll now execute the ES|QL query to get the top 5 categories by revenue.

✓  Shell curl -s -X POST "${ELASTIC_URL%/}/_query" \  -H "Authorization: ApiKey $(printenv ELASTIC_API_KEY)" \  -H …
{ 
   "took": 62,
   "is_partial": false, 
   "completion_time_in_millis": 1772805644164,
   "documents_found": 4675,
   "values_loaded": 12084, 
   "start_time_in_millis": 1772805644102, 
   "expiration_time_in_millis": 1773237644087,  
   "columns": [ 
     { 
       "name": "total_revenue",    
       "type": "double"  
     }, 
     {   
       "name": "products.category.keyword",

✦ The query for top 5 product categories by revenue was successful. I'll format the returned JSON values into a   user-friendly list.

 ✓  Shell 
                             
 Top 5 product categories by total sales revenue: 
 1. Men's Clothing: 149393.91
 2. Women's Clothing: 135099.91
 3. Women's Shoes: 105479.17
 4. Men's Shoes: 91797.92
 5. Women's Accessories: 60830.31 

✦ I've found the answer; now I'll format it for clarity.

 ✓  Shell 

 Here are the top 5 product categories by total sales revenue:                                                        
                                                                      
 | Rank | Category              | Total Revenue | 
 |------|-----------------------|---------------| 
 | 1    | Men's Clothing        | 149,393.91    |
 | 2    | Women's Clothing      | 135,099.91    |
 | 3    | Women's Shoes         | 105,479.17    |
 | 4    | Men's Shoes           | 91,797.92     | 
 | 5    | Women's Accessories   | 60,830.31     | 

✦ I've formatted and presented the answer. I'm finished.
 ───────────────────────────────────────────────────────────<p>É interessante notar como o modelo Gemini gera a resposta final mostrando todos os passos que ele segue. Aqui, você pode ver claramente a influência da habilidade no processo de raciocínio do modelo. Na primeira vez que o modelo reconhece que precisa usar uma habilidade ou executar um comando shell, ele solicita permissão usando a abordagem baseada em intervenção humana.</p><p>Ao lidar com o trabalho pesado de descoberta de esquema, geração de consultas e execução, a habilidade <code>esql</code> permite que você se concentre inteiramente nas respostas, em vez da mecânica de obtê-las. Você obterá os dados de que precisa, formatados corretamente e diretamente no seu terminal, tudo isso sem precisar escrever uma única linha de código ou alternar para outro aplicativo.</p><h2>Conclusão</h2><p>Neste artigo, apresentamos a extensão Elasticsearch para Gemini CLI que lançamos recentemente. Essa extensão oferece a você a capacidade de interagir com a instância do Elasticsearch usando o Gemini e o servidor Elasticsearch MCP fornecido pelo Elastic Agent Builder, disponível a partir da versão 9.3.0, bem como o comando <code>/elastic</code>.</p><p>Além disso, a extensão também inclui uma habilidade <code>esql</code> que converte a solicitação do usuário de linguagem natural em uma consulta ES|QL. Essa habilidade pode ser particularmente útil quando o servidor MCP não pode ser usado, pois a comunicação subjacente é conduzida por comandos curl simples executados em um terminal. O Elasticsearch oferece um conjunto abrangente de APIs REST que podem ser facilmente integradas a qualquer projeto. Isso é especialmente útil ao desenvolver aplicações de IA agêntica.</p><p>Para mais informações sobre nossa extensão Gemini CLI, acesse o repositório do projeto <a href="https://github.com/elastic/gemini-cli-elasticsearch">aqui</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/gemini-cli-extension-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/gemini-cli-extension-elasticsearch</guid>
    <category><![CDATA[Integrações]]></category>
    <category><![CDATA[IA Agêntica]]></category>
    <dc:creator><![CDATA[Walter Rafelsberger,Enrico Zimuel]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4ff43abe550941b4/6a17072ba29299fc2ad00fa4/6dfcec4a77b3dc83bf0d974417bf2e211abb1f4f-876x468.png" length="0" type="image/png"/>
    <pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Introdução do suporte ao Elasticsearch no Google MCP Toolbox for Databases]]></title>
    <description><![CDATA[Veja como o suporte ao Elasticsearch agora está disponível no Google MCP Toolbox for Databases e adote as ferramentas ES|QL para integrar seu índice com segurança a qualquer cliente MCP.]]></description>
    <content:encoded><![CDATA[<p>Neste artigo, vamos explicar como usar o Google MCP Toolbox com o <a href="https://github.com/elastic/elasticsearch">Elasticsearch</a> para construir uma ferramenta simples de extração de informações de um índice do Elasticsearch.</p><p>Recentemente, contribuímos para o projeto open source <a href="https://github.com/googleapis/genai-toolbox">Google MCP Toolbox for Databases</a>, adicionando suporte ao Elasticsearch como banco de dados.</p><p>Com esse novo recurso, agora você pode usar o Google MCP Toolbox para se conectar ao Elasticsearch e "conversar" diretamente com seus dados.</p><h2>Elasticsearch</h2><p>Precisamos ter uma instância do Elasticsearch em execução. Você pode ativar uma avaliação gratuita no <a href="https://www.elastic.co/cloud">Elastic Cloud</a> ou instalá-lo localmente usando o <a href="https://github.com/elastic/start-local">script start-local</a>:</p>curl -fsSL https://elastic.co/start-local | sh<p>Isso instalará o Elasticsearch e o Kibana no seu computador e gerará uma chave API para ser usada na configuração do Google MCP Toolbox.</p><p>A chave API será mostrada como saída do comando anterior e armazenada em um arquivo .env na pasta elastic-start-local.</p><h2>Instale o conjunto de dados de exemplo</h2><p>Após a instalação, você pode fazer login no Kibana usando o nome do usuário <em>elastic</em> e a senha gerada pelo script start-local (armazenada em um arquivo .env).</p><p>Você pode instalar o conjunto de dados de <strong>pedidos de comércio eletrônico </strong>disponível no Kibana. Inclui um único índice chamado <strong>kibana_sample_data_ecommerce</strong> contendo informações sobre 4.675 pedidos de um website de comércio eletrônico. Para cada pedido, temos as seguintes informações:</p><ul><li><p>Informações do cliente (nome, ID, data de nascimento, e-mail, etc.)</p></li><li><p>Data do pedido</p></li><li><p>ID do pedido</p></li><li><p>Produtos (lista de todos os produtos com preço, quantidade, ID, categoria, desconto, etc.)</p></li><li><p>SKU</p></li><li><p>Preço total (sem impostos, com impostos)</p></li><li><p>Quantidade total</p></li><li><p>Informações geográficas (cidade, país, continente, localização, região)</p></li></ul><p>Para instalar os dados de exemplo, abra a página <strong>Integrações</strong> no Kibana (busque por “Integração” na barra de busca superior) e instale os “Dados de Exemplo”. Confira os detalhes na documentação aqui: <a href="https://www.elastic.co/docs/explore-analyze/#gs-get-data-into-kibana">https://www.elastic.co/docs/explore-analyze/#gs-get-data-into-kibana</a>.</p><p>O objetivo deste artigo é mostrar como é fácil configurar o Google MCP Toolbox para se conectar ao Elasticsearch e interagir com o <strong>índice kibana_sample_data_ecommerce</strong> usando linguagem natural.</p><h2>Google MCP Toolbox</h2><p>O Google MCP Toolbox é um servidor MCP open source projetado para facilitar a interação de aplicações e agentes de IA com bancos de dados de forma segura e eficiente. Antes chamado de "GenAI Toolbox for Databases", o projeto foi renomeado após adotar total compatibilidade com o <a href="https://www.anthropic.com/news/model-context-protocol">Protocolo de Contexto de Modelo</a> (MCP). Seu objetivo é eliminar o trabalho pesado tradicionalmente exigido ao conectar agentes a bancos de dados, lidando com agrupamento de conexões, autenticação, observabilidade e outras preocupações operacionais nos bastidores.</p><p>Essencialmente, o Toolbox permite que desenvolvedores definam ferramentas reutilizáveis e de alto nível que encapsulam interações com bancos de dados. Essas ferramentas podem então ser invocadas por qualquer cliente que cumpra o MCP — como um agente de IA — sem exigir que o cliente implemente consultas SQL de baixo nível ou gerencie conexões de banco de dados. Essa abordagem reduz drasticamente a quantidade de código padrão necessário para construir agentes conscientes de banco de dados, tornando possível integrar operações avançadas de dados em apenas algumas linhas de lógica de aplicação. Uma vez definida uma ferramenta, ela pode ser compartilhada entre vários agentes, frameworks ou linguagens (Figura 1).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte90070297ee83546/6a16fa29964cea694b08b972/137cea290bb70ad5da21853f9a6358cef4cf7451-1248x1056.png" alt="" /><p>Uma grande vantagem de usar o Toolbox é o modelo de segurança integrado. Fluxos de autenticação, como OAuth2 e OIDC, são aceitos de forma nativa, permitindo que os desenvolvedores evitem manipular ou armazenar credenciais confidenciais de bancos de dados em agentes. A plataforma também fornece recursos de observabilidade, incluindo métricas e rastreamento, no OpenTelemetry, que é essencial para depuração, monitoramento e implantações de produção. No geral, o MCP Toolbox serve como uma interface unificada, segura e extensível para interagir com seus dados de qualquer sistema habilitado pelo MCP.</p><h2>Como instalar o MCP Toolbox</h2><p>Você pode instalar o servidor MCP Toolbox no Linux usando o seguinte comando:</p>export VERSION=0.21.0
curl -L -o toolbox https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox<p>Para instalá-lo no macOS ou Windows, siga as instruções detalhadas <a href="https://googleapis.github.io/genai-toolbox/getting-started/introduction/#installing-the-server">aqui</a>.</p><h2>Configure o Toolbox para Elasticsearch</h2><p>Para configurar o MCP Toolbox para Elasticsearch, precisamos criar um arquivo <strong>tools.yaml</strong> , conforme segue:</p>sources:
  my-cluster:
    kind: elasticsearch
    addresses:
      - http://localhost:9200
    apikey: &lt;insert-here-api-key&gt;

tools:
  customer-orders:
    kind: elasticsearch-esql
    source: my-cluster
    description: Get the orders made by a customer identified by name.
    query: |
    	FROM kibana_sample_data_ecommerce | WHERE MATCH(customer_full_name, ?name, {"operator": "AND"})
    parameters:
      - name: name
        type: string
        description: The customer name.

toolsets:
  elasticsearch-tools:
    - customer-orders<p>Você precisa trocar o valor <strong>&lt;insert-here-api-key&gt;</strong> por uma chave API válida do Elasticsearch. Se você estiver rodando o Elasticsearch localmente usando o start-local, pode encontrar a chave API no arquivo .env gerado pelo start-local, sob a variável <strong>ES_LOCAL_API_KEY</strong> . Se você estiver usando o Elastic Cloud, poderá gerar uma chave de API seguindo o procedimento descrito <a href="https://www.elastic.co/docs/deploy-manage/api-keys/elastic-cloud-api-keys">aqui</a>.</p><p>As ferramentas anteriores contêm a seguinte consulta ES|QL para Elasticsearch:</p><p>Se você não conhece o ES|QL, é uma linguagem de consulta desenvolvida pela Elastic, semelhante ao SQL, que pode ser usada para buscar em um ou mais índices. Saiba mais sobre ES|QL na documentação oficial <a href="https://www.elastic.co/docs/reference/query-languages/esql">aqui</a>.</p><p>A consulta acima busca todos os pedidos armazenados no <strong>índice kibana_sample_data_ecommerce</strong> que contêm o nome do cliente especificado, usando o parâmetro <strong>?name</strong> (o ponto de interrogação indica um parâmetro).</p><p>O nome do cliente é definido na configuração YAML anterior usando a string de tipo e a descrição "O nome do cliente".</p><p>Essa ferramenta pode ser usada para responder a perguntas sobre os pedidos de um cliente - por exemplo: <em>Quantos pedidos o cliente Foo fez em outubro de 2025?</em></p><p>As descrições das ferramentas e seus parâmetros são essenciais para extrair as informações relevantes da solicitação em linguagem natural do usuário. Essa extração é realizada usando o recurso de <strong>chamada de função</strong> de um modelo de linguagem grande (LLM). Na prática, um LLM pode determinar qual função (ferramenta) precisa ser executada para obter as informações necessárias, juntamente com os parâmetros apropriados para essa função.</p><p>Para saber mais sobre chamadas de função, sugerimos o artigo <a href="https://www.elastic.co/search-labs/blog/function-calling-with-elastic">Chamadas de função do OpenAI com Elasticsearch</a>, de Ashish Tiwari.</p><h2>Execute o servidor Toolbox</h2><p>Você pode executar o MCP Toolbox usando o arquivo tools.yaml anterior com o seguinte comando:</p>./toolbox --tools-file tools.yaml --ui<p>O parâmetro<strong> –ui</strong> executa uma aplicação web em <a href="http://127.0.0.1:5000/ui">http://127.0.0.1:5000/ui</a> (Figura 2).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0fb3953fae603572/6a16fa2aa6c2b92763e794fb/3caf2339b632bafd5847af1ed8b33b518a25b8a2-1600x314.png" alt="" /><p>Você pode selecionar <strong>Ferramentas</strong> &gt; <strong>customer-orders</strong> e inserir o nome do cliente no campo <strong>Nome</strong> do parâmetro (por exemplo, Gwen Sanders) e clicar no botão <strong>Executar</strong>. Você deve ver uma resposta JSON conforme a Figura 3.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltca02df8c78cb39ff/6a16fa2c961e6909b5c4cd22/b167e0142afb8919d9cedf6d0fa431d33d0e55f8-1600x933.png" alt="" /><p>A configuração está concluída, e o MCP Toolbox pode executar a ferramenta <strong>customer-orders</strong> para se comunicar com o Elasticsearch, rodando o ES|QL.</p><h2>Usando o MCP Toolbox com Gemini CLI</h2><p>Podemos usar qualquer cliente MCP para nos comunicar com o MCP Toolbox for Databases. Por exemplo, podemos usar o <a href="https://github.com/google-gemini/gemini-cli">Gemini CLI</a>, uma ferramenta de linha de comando, para usar o Gemini. Você pode instalar o Gemini CLI seguindo as instruções descritas <a href="https://geminicli.com/docs/get-started/installation/">aqui</a>.</p><p>Gemini CLI oferece uma extensão pré-configurada para MCP Toolbox, disponível em <a href="https://github.com/gemini-cli-extensions/mcp-toolbox">gemini-cli-extensions/mcp-toolbox</a>. Você pode instalar esta extensão executando o seguinte comando:</p>gemini extensions install https://github.com/gemini-cli-extensions/mcp-toolbox<p>Após a instalação, você precisa ir para o diretório em que armazenou o arquivo de configuração tools.yaml do MCP Toolbox e executar a CLI do Gemini da seguinte forma (essa etapa é necessária para que a CLI do Gemini seja configurada automaticamente com o MCP Toolbox):</p>gemini<p>Você deve ver uma saída conforme a Figura 4.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf7245c10b9e32cd6/6a16fa2d964cea073208b976/0f22df6d3da13c1dc50dcb560414fa7c630eb9a7-1434x341.png" alt="" /><p>Você pode verificar se a MCP Toolbox está conectada usando o seguinte comando:</p>/mcp list<p>Você deve ver a <strong>mcp_toolbox</strong> com as ferramentas<strong> de pedidos de clientes</strong> listadas (Figura 5).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte857b42dbe604203/6a16fa2f8b73cb531b189e33/97edbc40de9e44f469f6f3a09427532be167de0e-493x155.png" alt="" /><p>Se o MCP Toolbox estiver conectado à interface de comando Gemini, agora podemos tentar fazer algumas perguntas, como: "<em>Me dê os pedidos da cliente Gwen Sanders</em>." A CLI Gemini então solicitará permissão para executar a ferramenta de pedidos do cliente ao servidor mcp_toolbox (veja a Figura 6).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfb7ea752c1a39da7/6a16fa30cdacbfdf937d27ff/c052f3b5e49436903b804280c0065f67ee02444b-1432x284.png" alt="" /><p>Após a confirmação, a CLI Gemini executará a solicitação para a MCP Toolbox, recebendo uma resposta JSON como resultado e usando para formatar a resposta (Figura 7).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb9f6e04987137a9f/6a16fa320811ae2297e9fef7/7ea5128f1705951c2757af6da4b456d394d4a080-1432x734.png" alt="" /><p>A resposta da Gemini CLI emitirá um relatório indicando que Gewn Sanders fez apenas um pedido de 2 produtos, totalizando 132 euros.</p><h2>SDKs do MCP Toolbox</h2><p>O Google MCP Toolbox também oferece um SDK para acessar todas as funcionalidades de um programa escrito em Go, Python e Javascript.</p><p>Por exemplo, o Python SDK está disponível no Github na seguinte página: <a href="https://github.com/googleapis/mcp-toolbox-sdk-python">https://github.com/googleapis/mcp-toolbox-sdk-python.</a></p><p>Precisamos criar um agente simples para conectar à MCP Toolbox. Precisamos instalar os seguintes pacotes:</p>pip install toolbox-core
pip install google-adk<p>E crie um novo projeto de agente usando o comando a seguir:</p>adk create my_agent<p>Isso criará um novo diretório chamado <strong>my_agent</strong> com um <strong>arquivo agent.py</strong>.</p><p>Atualize <strong>my_agent/agent.py</strong> com o seguinte conteúdo para conectar ao Toolbox:</p>from google.adk import Agent
from google.adk.apps import App
from toolbox_core import ToolboxSyncClient

client = ToolboxSyncClient("http://127.0.0.1:5000")

root_agent = Agent(
    name='root_agent',
    model='gemini-2.5-flash',
    instruction="You are a helpful AI assistant designed to search information about a dataset of ecommerce orders.",
    tools=client.load_toolset(),
)

app = App(root_agent=root_agent, name="my_agent")<p>Crie um arquivo <strong>.env</strong> com sua chave API do Google:</p>echo 'GOOGLE_API_KEY="YOUR_API_KEY"' &gt; my_agent/.env<p>Por fim, podemos executar o agente e observar os resultados. Para executar o agente, você pode executar o seguinte comando:</p>adk run my_agent<p>Ou pode servi-lo por meio de uma interface web:</p>adk web --port 8000<p>Em ambos os casos, você pode interagir com a MCP Toolbox usando uma interface de perguntas e respostas. Por exemplo, você pode fazer a pergunta anterior: <em>Me dê os pedidos da cliente Gwen Sanders</em>.</p><p>Para saber mais sobre os diferentes SDKs, consulte <a href="https://googleapis.github.io/genai-toolbox/sdks/">esta página de documentação</a>.</p><h2>Conclusão</h2><p>Neste artigo, demonstramos a integração com o Elasticsearch para o Google MCP Toolbox for Databases. Usando um arquivo de configuração YAML simples, podemos definir um conjunto de ferramentas que traduzem perguntas de linguagem natural em consultas do Elasticsearch usando a linguagem ES|QL.</p><p>Mostramos como interagir com os conjuntos de dados kibana_sample_data_ecommerce, que contém pedidos de um website de e-commerce. Com esse arquivo de configuração, basta executar o servidor MCP Toolbox e conectar a ele a partir de qualquer cliente MCP.</p><p>Por fim, demonstramos como usar o Gemini CLI como cliente para conectar-se ao MCP Toolbox for Databases e consultar os dados de comércio eletrônico armazenados no Elasticsearch. Executamos uma consulta em linguagem natural para obter informações sobre pedidos de um cliente específico identificado pelo nome.</p><p>À medida que o ecossistema MCP continua crescendo, esse padrão — definições leves de ferramentas apoiadas por uma infraestrutura segura e pronta para produção — gera novas oportunidades para criar agentes cada vez mais capazes e com reconhecimento de dados com o mínimo esforço. Seja experimentando localmente com os conjuntos de dados de amostra da Elastic ou integrando capacidades de buscar em uma aplicação maior, o MCP Toolbox tem uma base confiável e extensível para interagir com os dados do Elasticsearch usando linguagem natural.</p><p>Para saber mais sobre o desenvolvimento de aplicações de IA agêntica, leia o artigo <a href="https://search-labs-redesign.vercel.app/search-labs/blog/ai-agentic-workflows-elastic-ai-agent-builder">Criando fluxos de trabalho de IA agêntica com Elasticsearch</a>, de Anish Mathur e Dana Juratoni.</p><p>Para saber mais informações sobre o Google MCP Toolbox, visite <a href="https://googleapis.github.io/genai-toolbox/getting-started/introduction/">https://googleapis.github.io/genai-toolbox/getting-started/introduction/</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/google-mcp-toolbox-elasticsearch-support</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/google-mcp-toolbox-elasticsearch-support</guid>
    <category><![CDATA[ES|QL]]></category>
    <category><![CDATA[IA Agêntica]]></category>
    <dc:creator><![CDATA[Enrico Zimuel,Laurent Saint-Félix]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt72d49893c51407cf/6a16fa33cf4f2502bab2cf7e/425a48691f436ed47c9bdfaf5d561ac122b2c472-1062x668.png" length="0" type="image/png"/>
    <pubDate>Fri, 12 Dec 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[De objetos ES|QL para PHP]]></title>
    <description><![CDATA[Aprenda como executar e gerenciar consultas ES|QL em PHP. Siga este guia para mapear resultados ES|QL para um objeto PHP ou classe personalizada.]]></description>
    <content:encoded><![CDATA[<p>A partir da <a href="https://github.com/elastic/elasticsearch-php/releases/tag/v8.13.0">versão 8.13.0</a> do elasticsearch-php, você pode executar consultas <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql.html">ES|QL</a> e mapear o resultado para um objeto PHP da <a href="https://www.php.net/manual/en/class.stdclass.php">classe padrão (stdClass)</a> ou de uma classe personalizada.</p><h2>ES|QL</h2><p><a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql.html">ES|QL</a> é uma nova linguagem de consulta do Elasticsearch introduzida na versão 8.11.0. Neste momento, está disponível em versão de pré-visualização técnica. Ele oferece uma maneira poderosa de filtrar, transformar e analisar dados armazenados no Elasticsearch.</p><p>Ele utiliza "pipes" (<code>|</code>) para manipular e transformar dados passo a passo. Essa abordagem permite aos usuários compor uma série de operações, onde o resultado de uma operação se torna a entrada para a próxima, possibilitando transformações e análises de dados complexas.</p><p>Por exemplo, a seguinte consulta retorna os 3 primeiros documentos (linhas) do índice <code>sample_data</code> :</p>FROM sample_data
| LIMIT 3
<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8b0310cb335872b7/6a17d7eab1e113258679f0df/c23aee777bacdf90c63b717fd9458207dfc0511d-864x284.png" alt="ES|QL produz tabelas" /><h2>Caso de uso: recursos ES|QL no cliente PHP oficial</h2><p>Para ilustrar os recursos do ES|QL desenvolvidos no cliente PHP oficial, armazenamos no Elasticsearch um <a href="https://github.com/elastic/elasticsearch-php-examples/blob/main/examples/ESQL/data/books.csv">arquivo CSV</a> com 81.828 livros (54,4 MB) contendo as seguintes informações:</p>Title;Descrition;Author;Year;Publisher;Ratings
<p>Extraímos esta lista do <a href="https://www.kaggle.com/datasets/mohamedbakhet/amazon-books-reviews">conjunto de dados público de avaliações de livros da Amazon</a>.</p><p>Criamos um índice <code>books</code> com os seguintes mapeamentos do Elasticsearch:</p>'mappings' : {
    'properties': {
        'title': {
            'type': 'text'
        },
        'description': {
            'type': 'text'
        },
        'author': {
            'type': 'text'
        },
        'year': {
            'type': 'short'
        },
        'publisher': {
            'type': 'keyword'
        },
        'rating': {
            'type': 'half_float'
        }
    }
}
<p>O valor <code>rating</code> é a média das classificações das avaliações extraídas do arquivo <a href="https://www.kaggle.com/datasets/mohamedbakhet/amazon-books-reviews?select=Books_rating.csv">Books_rating.csv</a> de 2,9 GB.</p><p><a href="https://github.com/elastic/elasticsearch-php-examples/blob/main/examples/ESQL/bulk.php">Aqui</a> você encontra o script PHP que usamos para importar todos os livros em massa para o Elasticsearch. A operação em lote levou 7 segundos e consumiu 28 MB de RAM usando o PHP 8.2.17. Com o mapeamento proposto, o tamanho do índice no Elasticsearch é de aproximadamente 62 MB.</p><h2>Mapear resultados ES|QL para um objeto PHP ou classe personalizada</h2><p>Podemos executar uma consulta ES|QL em PHP usando o endpoint <code>esql()-&gt;query()</code> . O resultado desta consulta é uma estrutura de dados em forma de tabela. Isso é expresso em JSON usando os campos <code>columns</code> e <code>values</code> . No campo <code>columns</code> temos a definição <code>name</code> e <code>type</code> .</p><p>Aqui está um exemplo de consulta ES|QL para recuperar os 10 melhores livros escritos por Stephen King, ordenados pela classificação das avaliações dos usuários:</p>$query = &lt;&lt;&lt;EOD
    FROM books
    | WHERE author == "Stephen King"
    | SORT rating DESC
    | LIMIT 10
EOD;

$result = $client-&gt;esql()-&gt;query([
    'body' =&gt; ['query' =&gt; $query]
]);
<p>O resultado JSON do Elasticsearch tem a seguinte aparência:</p>{
    "columns": [
        { "name": "author", "type": "text" },
        { "name": "description", "type": "text" },
        { "name": "publisher", "type": "keyword" },
        { "name": "rating", "type": "double" },
        { "name": "title", "type": "text" },
        { "name": "year", "type": "integer" }
    ],
    "values": [
        [
            "Stephen King",
            "The author ...",
            "Turtleback",
            5.0,
            "How writers write",
            2002
        ],
        [
            "Stephen King",
            "In Blockade Billy, a retired coach...",
            "Simon and Schuster",
            5.0,
            "Blockade",
            2010
        ],
        [
            "Stephen King",
            "A chilling collection of twenty horror stories.",
            "Signet Book",
            4.55859375,
            "Night Shift (Signet)",
            1979
        ],
        ...
    ]
}
<p>Neste exemplo, temos 6 propriedades (autor, descrição, editora, classificação, título, ano) relacionadas a um livro e 10 resultados, todos livros de Stephen King.</p><p>Uma lista de todos os tipos suportados em ES|QL é apresentada <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-limitations.html#esql-supported-types">aqui</a>.</p><p>O objeto de resposta <code>$result</code> pode ser acessado como uma matriz, uma string ou como um objeto (veja <a href="https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/connecting.html#client-usage">aqui</a> para mais informações).</p><p>Utilizando a interface de objeto, podemos acessar os valores por meio de propriedades e índices. Por exemplo, <code>$result-&gt;values[0][4]</code> retorna o título (4) do primeiro livro (0) da lista, <code>$result-&gt;values[1][3]</code> retorna a pontuação de classificação (3) do segundo livro (1), etc. Lembre-se, o índice de um array em PHP começa em zero.</p><p>Essa interface pode ser suficiente para alguns casos de uso, mas na maioria das vezes preferimos obter um array de objetos como resultado.</p><p>Para mapear o resultado em uma matriz de objetos, podemos usar o novo recurso <a href="https://github.com/elastic/elasticsearch-php/issues/1398">mapTo()</a> do elasticsearch-php.</p><p>Essa função está disponível diretamente no <a href="https://github.com/elastic/elasticsearch-php/blob/main/src/Response/Elasticsearch.php">objeto de resposta do Elasticsearch</a>. Isso significa que você pode acessá-lo da seguinte forma:</p>$books = $result-&gt;mapTo(); // Array of stdClass
foreach ($books as $book) {
    printf(
        "%s, %s, %d, Rating: %.2f\n",
        $book-&gt;author,
        $book-&gt;title,
        $book-&gt;year,
        $book-&gt;rating
    );
}
<p>Se você tiver uma classe Book personalizada, poderá mapear o resultado usando-a, da seguinte forma:</p>class Book
{
    public string $author;
    public string $title;
    public string $description;
    public int $year;
    public float $rating;
}

$books = $result-&gt;mapTo(Book::class); // Array of Book
<p>Se sua classe tiver outras propriedades além das incluídas no resultado ES|QL, isso também funcionará. A função <code>mapTo()</code> usará apenas as propriedades retornadas como colunas do resultado ES|QL.</p><p>Você pode baixar todos os exemplos relatados neste artigo <a href="https://github.com/elastic/elasticsearch-php-examples/tree/main/examples/ESQL">aqui</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/esql-php-map-object-class</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/esql-php-map-object-class</guid>
    <category><![CDATA[ES|QL]]></category>
    <category><![CDATA[PHP]]></category>
    <dc:creator><![CDATA[Enrico Zimuel]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt99f5ab85c0713977/6a17d7ebfbc5f8072b491918/aea56270f48cb64130d1b515b983434e0960dc2f-500x500.png" length="0" type="image/png"/>
    <pubDate>Mon, 08 Apr 2024 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>