<?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/fr/search-labs/author/enrico-zimuel</link>
    </image>
    <link>https://www.elastic.co/fr/search-labs/author/enrico-zimuel</link>
    <atom:link href="https://www.elastic.co/fr/search-labs/rss/author/enrico-zimuel.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[fr]]></language>
    <lastBuildDate>Fri, 16 Oct 2026 23:03:30 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Comment créer des applications d'IA agentique avec Mastra et Elasticsearch]]></title>
    <description><![CDATA[Découvrez comment créer des applications d'IA agentiques avec Mastra et Elasticsearch à travers un exemple pratique.]]></description>
    <content:encoded><![CDATA[<p>Dans cet article, nous allons voir comment utiliser le framework <a href="https://mastra.ai/">Mastra</a> TypeScript pour créer des applications agentiques qui interagissent avec <a href="https://www.elastic.co/elasticsearch">Elasticsearch</a>.</p><p>Nous avons récemment contribué au projet open source <a href="https://github.com/mastra-ai/mastra">mastra-ai/mastra</a> en ajoutant la prise en charge d'Elasticsearch en tant que base de données vectorielle. Avec cette nouvelle option, vous avez la possibilité d’utiliser Elasticsearch de manière native au sein de Mastra pour le stockage de vos plongements sémantiques. En plus des vecteurs, Elasticsearch propose une suite de fonctionnalités avancées pour répondre à toutes vos exigences en matière d’ingénierie de contexte. (par exemple, <a href="https://www.elastic.co/search-labs/blog/context-engineering-hybrid-search-evolution-agentic-ai">recherche hybride et reclassement</a>).</p><p>Cet article détaille la création d'un agent chargé de mettre en œuvre une architecture RAG (Retrieval Augmented Generation) à l'aide d'Elasticsearch. Nous présenterons un projet de démonstration dans lequel une approche agentique est utilisée pour interagir avec un corpus de données de films de science-fiction stockées dans Elasticsearch. Le projet est disponible à l’adresse <a href="https://github.com/elastic/mastra-elasticsearch-example">elastic/mastra-elasticsearch-example</a>.</p><h2>Mastra</h2><p>Mastra est un framework TypeScript qui permet de créer des applications d'IA agentiques.</p><p>La structure du projet dans Mastra se présente comme suit :</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>Dans Mastra, vous pouvez créer des <a href="https://mastra.ai/docs/agents/overview">agents</a>, <a href="https://mastra.ai/docs/agents/using-tools">outils</a>, <a href="https://mastra.ai/docs/workflows/overview">workflows</a> et <a href="https://mastra.ai/docs/evals/overview">scores</a>.</p><p>Un <strong>agent</strong> est une classe qui accepte un message en entrée et produit une réponse en sortie. Un agent peut utiliser des outils, de grands modèles de langage (LLM) et une mémoire (figure 1).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0f7484f7501997dc/6a170417cdacbffb5a7d28f6/f6aca2dcc7fcc45d25e06681649be1b2b7eb6781-706x721.png" alt="Un schéma montrant comment fonctionne un agent à Mastra." /><p>Les <strong>outils</strong> d’un agent lui permettent d’interagir avec le « monde extérieur », par exemple en communiquant avec une API Web ou en effectuant une opération interne, comme l’interrogation d’Elasticsearch. Le composant <strong>mémoire</strong> est crucial pour stocker l'historique des conversations, y compris les entrées et sorties passées. Ce contexte stocké permet à l’agent de fournir des réponses plus éclairées et pertinentes aux questions futures en utilisant ses interactions passées.</p><p>Les <strong>workflows</strong> permettent de définir des séquences complexes de tâches en utilisant des étapes claires et structurées, plutôt que de se fier au raisonnement d’un seul agent (figure 2). Ils vous donnent un contrôle total sur la manière dont les tâches sont décomposées, comment les données circulent entre elles et ce qui est exécuté à chaque fois. Les workflows s'exécutent en utilisant le moteur d'exécution intégré par défaut ou peuvent être déployés sur des <a href="https://mastra.ai/docs/deployment/workflow-runners">workflow runners</a>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd82ea661569e1018/6a170419dc55de3adde00cc9/0dce161cf7891207015dc87532b5b90df1822432-880x252.png" alt="Un exemple de workflow dans Mastra." /><p>Dans Mastra, vous pouvez également définir des scores : des tests automatisés qui évaluent les sorties des agents à l'aide de méthodes basées sur des modèles, des règles et des statistiques. Les scoreurs renvoient <em>des scores</em> : des valeurs numériques (généralement entre 0 et 1) qui quantifient dans quelle mesure une sortie répond à vos critères d'évaluation. Ces scores vous permettent de suivre objectivement les performances, de comparer différentes approches et d'identifier les domaines à améliorer dans vos systèmes d'IA. Les évaluateurs peuvent être personnalisés avec vos propres invites et fonctions de notation.</p><h2>Elasticsearch</h2><p>Pour exécuter le projet de démonstration, nous devons avoir une instance Elasticsearch en cours d'exécution. Vous pouvez activer un essai gratuit sur <a href="https://www.elastic.co/cloud">Elastic Cloud</a> ou l’installer localement en utilisant le script <a href="https://github.com/elastic/start-local"><code>start-local</code></a> :</p>curl -fsSL https://elastic.co/start-local | sh<p>Cela installera Elasticsearch et Kibana sur votre ordinateur et générera une clé API à utiliser pour configurer l’intégration Mastra.</p><p>La clé API sera affichée comme sortie de la commande précédente et stockée dans un fichier <strong>.env</strong> dans le dossier elastic-start-local.</p><h2>Installation et configuration de la démo</h2><p>Nous avons créé un dépôt <a href="https://github.com/elastic/mastra-elasticsearch-example">elastic/mastra-elasticsearch-example</a> contenant le code source du projet de démonstration. L'exemple rapporté dans le référentiel illustre comment créer un agent dans Mastra qui implémente une architecture RAG pour récupérer des documents depuis Elasticsearch.</p><p>Nous avons fourni un ensemble de données pour la démo sur les films de science-fiction. Nous avons extrait 500 films de l'ensemble de données IMDb sur <a href="https://www.kaggle.com/datasets/rajugc/imdb-movies-dataset-based-on-genre/versions/2?select=scifi.csv">Kaggle</a>.</p><p>La première étape consiste à installer les dépendances du projet avec npm, en utilisant la commande suivante :</p>npm install<p>Ensuite, nous devons configurer le fichier <strong>.env</strong> qui contiendra les paramètres. Nous pouvons générer ce fichier en copiant la structure du fichier <strong>.env.example</strong>, à l'aide de la commande suivante :</p>cp .env.example .env<p>Nous pouvons maintenant modifier le fichier .env, en ajoutant les informations manquantes :</p>OPENAI_API_KEY=
ELASTICSEARCH_URL=
ELASTICSEARCH_API_KEY=
ELASTICSEARCH_INDEX_NAME=scifi-movies<p>Le nom de l’index Elasticsearch est <strong><code>scifi-movies</code></strong>. Si vous le souhaitez, vous pouvez le modifier en utilisant la variable env <code>ELASTICSEARCH_INDEX_NAME</code>.</p><p>Nous avons utilisé OpenAI comme service d’intégration, ce qui signifie que vous devez fournir une clé API pour OpenAI dans la variable <code>OPENAI_API_KEY</code> environnement.</p><p>Le modèle de plongement utilisé dans l'exemple est <a href="https://developers.openai.com/api/docs/models/text-embedding-3-small">openai/text-embedding-3-small</a>, avec une dimension de plongement de 1536.</p><p>Pour obtenir la réponse finale, nous avons utilisé le modèle <a href="https://developers.openai.com/api/docs/models/gpt-5-nano">openai/gpt-5-nano</a> afin de réduire les coûts.</p><p>La structure RAG autorise l’usage d’un LLM moins sophistiqué en bout de chaîne, puisque la mission critique d’ancrage de la réponse dans des données fiables est assurée en amont par le moteur de recherche (Elasticsearch).</p><p>Le LLM plus petit n'est responsable que de deux tâches principales :</p><ul><li><p><strong>Reformuler/intégrer la requête :</strong> conversion de la question en langage naturel de l'utilisateur en une question vectorielle intégrée pour la recherche sémantique.</p></li><li><p><strong>Synthétiser la réponse :</strong> prendre les éléments contextuels (documents/films) les plus pertinents récupérés et les synthétiser pour obtenir une réponse cohérente, finale et lisible par l'homme, en suivant les instructions rapides fournies.</p></li></ul><p>Puisque le processus RAG <strong>fournit le contexte factuel précis</strong> nécessaire à la réponse, le LLM final n’a pas besoin d’être massif ou extrêmement complexe, et il n’est pas nécessaire qu’il possède toutes les connaissances requises au sein de ses propres paramètres (domaine où excellent les modèles volumineux et coûteux). Il agit essentiellement comme un outil sophistiqué de résumé et de formatage de texte pour le contexte fourni par Elasticsearch, plutôt que comme une base de connaissances à part entière. Cela permet l’utilisation de modèles comme <code>gpt-5-nano</code> pour l’optimisation des coûts et de la latence.</p><p>Après la configuration du fichier .env , vous pouvez ingérer les films dans Elasticsearch à l'aide de la commande suivante :</p>npx tsx src/utility/store.ts<p>Vous devriez obtenir la sortie suivante :</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>Le mapping de l’index des films de science-fiction contient les champs suivants :</p><ul><li><p><strong>plongement</strong>, vecteur dense de dimension 1536, similarité cosinus.</p></li><li><p><strong>description</strong>, texte contenant la description du film.</p></li><li><p><strong>réalisateur</strong>, texte contenant le nom du réalisateur.</p></li><li><p><strong>titre</strong>, texte contenant le titre du film.</p></li></ul><p>Nous avons généré les vecteurs d'inclusion en utilisant le titre et la description. Puisque le titre et la description sont deux champs distincts, la concaténation des deux garantit que le vecteur d’inclusion résultant capture à la fois l’identité spécifique et unique (titre) et le contexte descriptif riche (description) du film, conduisant à des résultats de recherche sémantiques plus précis et complets. Cette entrée combinée donne au modèle d'intégration une meilleure représentation unique du contenu du document pour le rapprochement par similarité.</p><h2>Exécutez la démo</h2><p>Vous pouvez exécuter la démo avec la commande suivante :</p>npm run dev<p>Cette commande lancera une application web à <strong>localhost :4111</strong> pour accéder à Mastra Studio (figure 3).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8a539df677a33b36/6a17041a47d49c36842d88a0/1567e309df21a12bcf1dfef4429f82342549956c-1705x1079.png" alt="Capture d'écran de Mastra Studio avec l'exemple d'Elasticsearch Agent." /><p><a href="https://mastra.ai/docs/getting-started/studio">Mastra Studio</a> offre une interface utilisateur interactive pour construire et tester vos agents, ainsi qu'une API REST qui expose votre application Mastra en tant que service local. Cela vous permet de commencer à construire immédiatement sans vous soucier de l'intégration.</p><p>Nous avons fourni un <strong>agent Elasticsearch</strong> qui utilise l'<a href="https://mastra.ai/reference/tools/vector-query-tool">outil createVectorQueryTool</a> de Mastra comme outil pour exécuter une recherche sémantique à l'aide d'Elasticsearch. Cet agent utilise l'approche RAG pour rechercher des documents pertinents (c'est-à-dire des films) pour répondre à la question de l'utilisateur.</p><p>Cet agent utilise la consigne suivante :</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>Si vous cliquez sur le menu <code>Mastra Studio &gt; Agents</code> et sélectionnez <strong>Agent Elasticsearch</strong>, vous pouvez tester l’agent via un système de chat. Par exemple, vous pouvez demander des informations sur les films de science-fiction en posant la question suivante :</p><p><em>Trouvez 5 films ou séries télévisées sur les OVNI</em>.</p><p>Vous remarquerez que l’agent exécutera le vectorQueryTool. Vous pouvez cliquer sur l'outil invoqué pour voir l'entrée et la sortie. À la fin de l’exécution, le LLM répondra à votre question, compte tenu du contexte issu de l’index des films de science-fiction d’Elasticsearch (figure 4).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltda92a9b6e56528d3/6a17041c2b835f9724f4b0d6/d9998d4f687984de98845dae52d1288166abf448-1344x1071.png" alt=" Réponse de LLM à l'aide de l'agent Elasticsearch." /><p>Mastra exécute les étapes suivantes en interne :</p><ol><li><p><strong>Conversion vectorielle :</strong> La question de l'utilisateur, <em>trouvez 5 films ou séries télévisées sur les OVNI,</em> est convertie en une intégration vectorielle à l'aide du modèle <code>openai/text-embedding-3-small</code> d'OpenAI.</p></li><li><p><strong>Recherche vectorielle :</strong> ce plongement sémantique sert alors à effectuer une requête au sein d’Elasticsearch par le biais d’une recherche vectorielle.</p></li><li><p><strong>Récupération des résultats :</strong> Elasticsearch renvoie un ensemble de 10 films très pertinents par rapport à la requête (c'est-à-dire ceux dont les vecteurs sont les plus proches du vecteur de la requête de l'utilisateur).</p></li><li><p><strong>Génération de réponses :</strong> Les films récupérés et la question originale de l'utilisateur sont envoyés au LLM, en particulier à <code>openai/gpt-5-nano</code>. Le LLM traite ces informations et génère une réponse finale, en s'assurant que la demande de l'utilisateur pour cinq résultats est satisfaite.</p></li></ol><h2>L'agent Elasticsearch</h2><p>Ici, nous avons rapporté le code source d'Elasticsearch Agent.</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>L'<strong>outil vectorQueryTool</strong> est l'outil invoqué pour mettre en œuvre la partie extraction de l'exemple RAG. Il utilise l’implémentation <a href="https://mastra.ai/reference/vectors/elasticsearch">ElasticSearchVector</a> qu’Elastic a apportée à Mastra.</p><p>L’agent est une instance de la classe agent qui utilise le vectorQueryTool, l’invite et un composant de mémoire. On remarque que le code nécessaire pour l’interconnexion entre Elasticsearch et un agent est extrêmement réduit.</p><h2>Conclusion</h2><p>Cet article a mis en lumière la facilité et l'efficacité de l'association entre Elasticsearch et la structure Mastra pour développer des solutions d'IA agentiques avancées. Nous avons plus spécifiquement exploré la conception d’un agent RAG pouvant mener des recherches sémantiques sur un ensemble de données relatives à des films de science-fiction indexés sous Elasticsearch.</p><p>L’un des enseignements majeurs réside dans la contribution directe d’Elastic à la communauté Mastra, permettant d’intégrer nativement Elasticsearch comme magasin de vecteurs. Cette intégration réduit considérablement la barrière à l'entrée, comme le montre le code source de l'<strong>agent Elasticsearch</strong>. En utilisant <code>ElasticSearchVector</code> et <code>createVectorQueryTool</code>, la configuration complète pour connecter Elasticsearch à votre agent ne nécessite qu'un nombre minimal de lignes de code de configuration.</p><p>Elasticsearch propose plusieurs fonctionnalités avancées pour améliorer la pertinence des résultats. Par exemple, la <a href="https://www.elastic.co/elasticsearch/hybrid-search">recherche hybride</a> améliore considérablement la précision en combinant la recherche lexicale et la recherche vectorielle. Une autre fonctionnalité intéressante est le reranking utilisant les derniers <a href="https://www.elastic.co/search-labs/tutorials/jina-tutorial/jina-reranker-v3">modèles Jina</a> qui peuvent être appliqués à la fin de la recherche hybride. Pour en savoir plus sur ces techniques, consultez les articles suivants d'Elasticsearch Labs :</p><ul><li><p><a href="https://www.elastic.co/search-labs/blog/hybrid-search-elasticsearch">Recherche hybride Elasticsearch</a> par Valentin Crettaz</p></li><li><p><a href="https://www.elastic.co/search-labs/blog/jina-models-elasticsearch-guide">Présentation des modèles Jina, de leurs fonctionnalités et de leurs cas d'usage dans Elasticsearch</a> par Scott Martens</p></li></ul><p>Nous vous encourageons également à explorer l’exemple fourni et à commencer à créer vos propres agents alimentés par les données avec Mastra et Elasticsearch. Pour plus d'informations sur Mastra, vous pouvez consulter la documentation officielle <a href="https://mastra.ai/docs">ici</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 agentique]]></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[L'extension Gemini CLI pour Elasticsearch avec des outils et des fonctionnalités]]></title>
    <description><![CDATA[Présentation de l’extension Elastic pour le CLI Gemini de Google, afin de rechercher, récupérer et analyser les données Elasticsearch dans les workflows des développeurs et des agents.
]]></description>
    <content:encoded><![CDATA[<p>Nous sommes heureux d'annoncer la sortie de notre extension Elastic pour l'interface de ligne de commande Gemini de Google, qui apporte toute la puissance de <a href="https://www.elastic.co/elasticsearch">Elasticsearch</a> et <a href="https://www.elastic.co/elasticsearch/agent-builder">Elastic Agent Builder</a> directement dans votre workflow de développement d'IA. Cette extension propose également plusieurs compétences d’agent récemment développées pour interagir avec Elasticsearch.</p><p>L'extension est disponible en tant que projet open source <a href="https://github.com/elastic/gemini-cli-elasticsearch">ici</a>.</p><h2>Qu'est-ce que Gemini CLI et comment l'installer ?</h2><p><a href="https://geminicli.com/">Gemini CLI</a> est un agent d’IA open source qui intègre les modèles Gemini de Google directement dans la ligne de commande. Il permet aux développeurs d’interagir avec l’IA depuis le terminal pour effectuer des tâches telles que générer du code, éditer des fichiers, exécuter des commandes shell et récupérer des informations sur le web.</p><p>Contrairement aux interfaces de chat classiques, Gemini CLI s'intègre à votre environnement de développement local, ce qui signifie qu'il peut comprendre le contexte du projet, modifier des fichiers, assurer l'exécution des compilations ou des tests et automatiser les workflows directement dans le terminal. Il est donc utile aux développeurs, aux ingénieurs de fiabilité des sites (SRE) et aux ingénieurs qui souhaitent un codage assisté par l'IA et une automatisation sans quitter leur workflow en ligne de commande.</p><p>Le CLI Gemini s’installe à l’aide de plusieurs gestionnaires de paquets. La méthode la plus courante passe par npm :</p>npm install -g @google/gemini-cli<p>Si vous souhaitez connaître d’autres options d’installation, consultez la <a href="https://geminicli.com/docs/get-started/installation/">page officielle d’installation</a>.</p><p>Après l’installation, lancez la CLI en exécutant :</p>gemini<p>Vous voyez un écran, comme illustré sur la figure 1 :</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt4ff43abe550941b4/6a17072ba29299fc2ad00fa4/6dfcec4a77b3dc83bf0d974417bf2e211abb1f4f-876x468.png" alt="Une capture d'écran de Gemini CLI." /><h2>Configurer Elasticsearch</h2><p>Nous avons besoin d'une instance Elasticsearch en cours d'exécution. Si vous souhaitez utiliser le serveur Model Context Protocol (MCP), vous devez également installer Kibana 9.3+. Pour utiliser le langage de requête Elasticsearch (ES|QL) (<code>esql</code>) décrit ci-dessous, Kibana n’est pas requise.</p><p>Vous pouvez activer un essai gratuit sur <a href="https://www.elastic.co/cloud">Elastic Cloud</a> ou l’installer localement en utilisant le script <a href="https://github.com/elastic/start-local"><code>start-local</code></a> :</p>curl -fsSL https://elastic.co/start-local | sh<p>Cela installera Elasticsearch et Kibana sur votre ordinateur et générera une clé API à utiliser pour configurer Gemini CLI.</p><p>La clé API sera affichée comme sortie de la commande précédente et stockée dans un fichier <strong>.env</strong> fichier dans le dossier <strong><code>elastic-start-local</code></strong>.</p><p>Si vous utilisez Elasticsearch sur site (par exemple, en utilisant <code>start-local</code>), et que vous souhaitez utiliser Elastic Agent Builder avec MCP, vous devez aussi connecter un grand modèle de langage (LLM). Vous pouvez consulter <a href="https://www.elastic.co/docs/explore-analyze/ai-features/llm-guides/llm-connectors">cette page de documentation</a> pour comprendre les différentes options.</p><p>Si vous utilisez Elastic Cloud (ou Elastic Cloud Serverless), vous disposez déjà d’une connexion LLM préconfigurée.</p><h2>Installez l'extension Elasticsearch</h2><p>Vous pouvez installer l'extension Elasticsearch pour Gemini CLI avec la commande suivante :</p>gemini extensions install https://github.com/elastic/gemini-cli-elasticsearch<p>Vous pouvez vérifier que les extensions ont été installées avec succès en ouvrant Gemini et en exécutant la commande suivante :</p>/extensions list<p>L'extension Elasticsearch devrait être disponible.</p><p>Si vous souhaitez utiliser l'intégration MCP, vous devez avoir une version d'Elasticsearch 9.3+ installée. Vous avez besoin de l’URL de votre serveur MCP depuis <a href="https://www.elastic.co/kibana">Kibana</a> :</p><ul><li><p>Obtenez l'URL de votre serveur MCP dans Agents &gt; Voir tous les outils &gt; Gérer MCP &gt; Copier l'URL du serveur MCP.</p></li><li><p>L'URL se présentera comme suit : https://your-kibana-instance/api/agent_builder/mcp</p></li></ul><p>Vous avez besoin de l’URL de l'endpoint Elasticsearch. Ce message apparaît généralement en haut de la page Elasticsearch de Kibana. Si vous utilisez Elasticsearch avec <code>start-local</code>, vous avez déjà l'endpoint dans la clé <code>ES_LOCAL_URL</code> dans le fichier<code>start-local</code> .env.</p><p>Vous avez également besoin d’une clé API. Si vous exécutez Elasticsearch avec <code>start-local</code>, vous avez déjà le <code>ES_LOCAL_API_KEY</code> dans le fichier <code>start-local</code> .env. Sinon, vous pouvez créer une clé API en utilisant l’interface Kibana, comme indiqué <a href="https://www.elastic.co/docs/deploy-manage/api-keys/elasticsearch-api-keys">ici</a> :</p><ul><li><p>Dans Kibana : Stack Management &gt; Security &gt; Clés API &gt; Créer une clé API.</p></li><li><p>Nous suggérons de définir uniquement les privilèges de lecture pour la clé API, en activant le privilège <code>feature_agentBuilder.read</code> comme indiqué <a href="https://www.elastic.co/docs/explore-analyze/ai-features/agent-builder/permissions#grant-access-with-roles">ici</a>.</p></li><li><p>Copiez la valeur de la clé API encodée.</p></li></ul><p>Définissez les variables d'environnement requises dans votre 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>Installer l'ensemble de données d'exemple</h2><p>Vous pouvez installer l'ensemble de données <strong>eCommerce orders </strong>disponible dans Kibana. Il comprend un seul index nommé <strong><code>kibana_sample_data_ecommerce</code></strong>, contenant des informations sur 4 675 commandes provenant d'un site web. Pour chaque commande, nous disposons des informations suivantes :</p><ul><li><p>Informations client (nom, identifiant, date de naissance, e-mail, etc.).</p></li><li><p>Date de la commande.</p></li><li><p>ID de commande.</p></li><li><p>Produits (liste de tous les produits avec prix, quantité, identification, catégorie, réduction et autres détails).</p></li><li><p>SKU.</p></li><li><p>Prix total (hors taxes, taxes incluses).</p></li><li><p>Quantité totale.</p></li><li><p>Informations géographiques (ville, pays, continent, localisation, région).</p></li></ul><p>Pour installer les données d'exemple, ouvrez la page <strong>Intégrations</strong> dans Kibana (recherchez « Intégrations » dans la barre de recherche supérieure) et installez l'<strong>ensemble de données</strong> « Échantillons de données ». Pour plus de détails, consultez la documentation <a href="https://www.elastic.co/docs/explore-analyze/#gs-get-data-into-kibana">ici</a>.</p><p>Le but de cet article est de montrer à quel point il est facile de configurer la CLI Gemini pour se connecter à Elasticsearch et interagir avec l'index <strong><code>kibana_sample_data_ecommerce</code></strong>.</p><h2>Comment utiliser le MCP d’Elasticsearch</h2><p>Vous pouvez vérifier la connexion à l'aide de la commande suivante dans Gemini :</p>/mcp list<p>Le <strong><code>elastic-agent-builder</code></strong> devrait être activé, comme le montre la figure 2 :</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt52b85e7255360f3b/6a17072da929cf33d3ae08f5/1508423bc1d1bc3c04a1cb01e2d59495a3516ed1-1465x844.png" alt="Le serveur MCP « elastic-agent-builder » avec la liste des outils." /><p>Elasticsearch fournit un ensemble d'outils par défaut. Voir la description <a href="https://www.elastic.co/docs/explore-analyze/ai-features/agent-builder/tools/builtin-tools-reference">ici</a>.</p><p>Grâce à ces outils, vous pouvez interagir avec Elasticsearch, en posant des questions telles que :</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>En fonction de la question, Gemini utilisera un ou plusieurs des outils disponibles pour tenter d'y répondre.</p><h2>Les commandes /elastic</h2><p>Dans l’extension Elasticsearch pour Gemini CLI, nous avons également ajouté<strong><code>/elastic</code></strong> commandes.</p><p>Si vous exécutez la commande <strong><code>/help</code></strong>, vous verrez toutes les options <code>/elastic</code> disponibles (Figure 3) :</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt741c7451ecab10d2/6a17072ea6c2b9ccd6e79643/5b2a0727ce7a04354878dd048253d3f4d062324b-1983x230.png" alt="Commandes /elastic disponibles." /><p>Ces commandes peuvent être utiles si vous souhaitez exécuter directement un outil spécifique du serveur MCP <code>elastic-agent-builder</code>. Par exemple, en utilisant la commande suivante, vous pouvez obtenir le mapping de <code>kibana_sample_data_ecommerce</code> :</p>/elastic:get-mapping kibana_sample_data_ecommerce<p>Ces commandes sont essentiellement des raccourcis permettant d’exécuter des outils spécifiques, plutôt que de s’en remettre au modèle Gemini pour déterminer l’outil à invoquer.</p><h2>Comment utiliser les compétences Elasticsearch</h2><p>Cette extension inclut également une <a href="https://github.com/elastic/gemini-cli-elasticsearch/tree/main/skills/esql">compétence d’agent pour ES|QL</a>, le <a href="https://www.elastic.co/docs/explore-analyze/discover/try-esql">langage de requête canalisé d’Elasticsearch (ES|QL)</a> disponible dans Elasticsearch. <a href="https://agentskills.io/home">Agent Skills</a> est un format ouvert qui fournit aux agents IA de codage, comme Gemini CLI, des instructions personnalisées pour des tâches spécifiques. Ils utilisent un concept appelé <em>divulgation progressive</em>, ce qui signifie que seule une brève description de la compétence est ajoutée au prompt système initial. Lorsque vous demandez à l’agent d’effectuer une tâche, comme interroger Elasticsearch, il fait correspondre la requête à la compétence pertinente et charge dynamiquement les instructions détaillées. Il s’agit d’un moyen efficace de gérer les budgets de tokens tout en fournissant à l’IA exactement le contexte dont elle a besoin.</p><p>La<strong> compétence</strong> <strong><code>esql</code></strong>est conçue pour permettre à Gemini CLI d’écrire et d’exécuter des requêtes ES|QL directement sur votre cluster. ES|QL est un langage de requête puissant qui rend l'exploration des données, l'analyse des logs et les agrégations très intuitives. Avec cette compétence activée, vous n'avez pas besoin de rechercher la syntaxe ES|QL ; vous pouvez simplement poser des questions en langage naturel à l'interface en ligne de commande Gemini sur vos données, et l'agent se chargera du reste.</p><p>Les exécutions sont réalisées à l'aide de simples commandes <a href="https://curl.se/">curl</a> lancées dans un terminal. L’intégration d’Elasticsearch à n’importe quelle architecture est simplifiée par la richesse de ses API REST.</p><p><strong>Ce que la </strong>compétence<strong><code>esql</code></strong><strong> offre :</strong></p><ul><li><p><strong>Recherche d'index et de schémas :</strong> L'agent peut utiliser les outils intégrés de la compétence pour dresser la liste des index disponibles et récupérer le mapping des champs. Par exemple, avant d’écrire une requête pour l’ensemble de données eCommerce, l’agent peut effectuer une exécution de vérification de schéma sur <strong><code>kibana_sample_data_ecommerce</code></strong> afin de comprendre les champs disponibles, comme <strong><code>taxful_total_price</code></strong> ou <strong><code>category</code></strong>.</p></li><li><p><strong>Traduction transparente en langage naturel :</strong> La compétence donne à l'agent plus qu'un simple manuel de référence ; elle lui fournit un guide spécifique pour interpréter l'intention de l'utilisateur. Dès que vous tapez une demande en langage naturel, par exemple « Afficher le temps de réponse moyen groupé par service », l’agent s’appuie sur les modèles intégrés de la compétence pour convertir vos mots en commandes, filtres et agrégations ES|QL appropriés.</p></li><li><p><strong>Autocorrection :</strong> en cas d’échec d’une requête (erreur de syntaxe ou de type, par exemple), la compétence transmet la requête ainsi que l’erreur Elasticsearch précise. L’agent peut alors la rectifier immédiatement et retenter l’opération sans que vous ayez à intervenir.</p></li></ul><p>Comme la compétence <code>esql</code> est également disponible sous forme d'outil sur le serveur MCP <code>elastic-agent-builder</code>, nous devons désactiver ce serveur temporairement. Vous pouvez utiliser la commande suivante pour le désactiver :</p>/mcp disable elastic-agent-builder<p>Ensuite, vous pouvez simplement taper une invite comme celle-ci dans votre interface de ligne de commande Gemini :</p>Find the top 5 product categories by total sales revenue in the kibana_sample_data_ecommerce index<p>L’agent devra :</p><ul><li><p>Reconnaissez la nécessité de la compétence <code>esql</code>.</p></li><li><p>Consultez le schéma de <strong><code>kibana_sample_data_ecommerce</code></strong>.</p></li><li><p>Construisez une requête ES|QL, comme : <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>Exécutez la requête auprès de l’API Elasticsearch.</p></li><li><p>Présentez la réponse finale directement dans le terminal.</p></li></ul><p>Nous avons cité ici un exemple de réponse de Gemini à la question précédente :</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>Il est intéressant de noter comment le modèle Gemini génère la réponse finale en montrant toutes les étapes qu’il suit. On peut voir ici l’influence de la compétence sur la démarche de réflexion du modèle. Dès que le modèle identifie la nécessité d’utiliser une compétence ou d’exécuter une commande shell, il sollicite une autorisation via l’approche supervision humaine dans la boucle.</p><p>Grâce à la gestion automatisée de la découverte de schéma, de la génération de requêtes et de leur exécution, la compétence <code>esql</code> vous libère des contraintes techniques pour vous focaliser uniquement sur l’analyse des résultats. Vous obtiendrez les données dont vous avez besoin, correctement formatées et directement dans votre terminal, sans jamais écrire une seule ligne de code ni basculer vers une autre application.</p><h2>Conclusion</h2><p>Dans cet article, nous avons présenté l'extension Elasticsearch pour Gemini CLI que nous avons récemment publiée. Cette extension vous permet d'interagir avec votre instance Elasticsearch en utilisant Gemini et le serveur Elasticsearch MCP fourni par Elastic Agent Builder, disponible à partir de la version 9.3.0, ainsi que la commande <code>/elastic</code>.</p><p>De plus, l'extension comprend également une compétence <code>esql</code> qui convertit la demande d'un utilisateur en langage naturel en une requête ES|QL. Cette compétence est très pratique quand l’usage du serveur MCP est impossible, puisque les échanges s’appuient sur l’exécution de commandes curl basiques dans le terminal. L’intégration d’Elasticsearch à tous vos projets est simplifiée par la richesse de ses API REST. C’est particulièrement utile lors du développement d’applications d’IA agentique.</p><p>Pour plus d’informations sur notre extension Gemini CLI, visitez le dépôt de projets <a href="https://github.com/elastic/gemini-cli-elasticsearch">ici</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[Intégrations]]></category>
    <category><![CDATA[IA agentique]]></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[Présentation de la prise en charge d'Elasticsearch dans Google MCP Toolbox for Databases]]></title>
    <description><![CDATA[Découvrez les caractéristiques de la prise en charge d'Elasticsearch maintenant disponible dans Google MCP Toolbox for Databases et utilisez les outils ES|QL pour intégrer en toute sécurité votre index à n'importe quel client MCP.]]></description>
    <content:encoded><![CDATA[<p>Dans cet article, nous allons expliquer comment utiliser Google MCP Toolbox avec <a href="https://github.com/elastic/elasticsearch">Elasticsearch</a> pour créer un outil simple permettant d'extraire des informations d'un index Elasticsearch.</p><p>Nous avons récemment contribué au projet open source <a href="https://github.com/googleapis/genai-toolbox">Google MCP Toolbox for Databases</a> en ajoutant la prise en charge d'Elasticsearch en tant que base de données.</p><p>Grâce à cette nouvelle fonctionnalité, vous pouvez désormais utiliser Google MCP Toolbox pour vous connecter à Elasticsearch et "dialoguer" directement avec vos données.</p><h2>Elasticsearch</h2><p>Nous avons besoin d'une instance Elasticsearch en cours d'exécution. Vous pouvez activer un essai gratuit sur <a href="https://www.elastic.co/cloud">Elastic Cloud</a> ou l'installer localement via le script <a href="https://github.com/elastic/start-local">start-local</a> :</p>curl -fsSL https://elastic.co/start-local | sh<p>Cela installera Elasticsearch et Kibana sur votre ordinateur et générera une clé API à utiliser pour configurer Google MCP Toolbox.</p><p>La clé API sera affichée comme sortie de la commande précédente et stockée dans un fichier .env dans le dossier elastic-start-local.</p><h2>Installer l'ensemble de données d'exemple</h2><p>Après l'installation, connectez-vous à Kibana en utilisant le nom d'utilisateur <em>elastic</em> et le mot de passe généré par le script "start-local" (stocké dans un fichier .env).</p><p>Vous pouvez installer l'ensemble de données <strong>eCommerce orders </strong>disponible dans Kibana. Il comprend un seul index nommé <strong>kibana_sample_data_ecommerce</strong> contenant des informations sur 4 675 commandes provenant d'un site web. Pour chaque commande, nous disposons des informations suivantes :</p><ul><li><p>Informations client (nom, identifiant, date de naissance, e-mail, etc.)</p></li><li><p>Date de la commande</p></li><li><p>ID de la commande</p></li><li><p>Produits (liste de tous les produits avec prix, quantité, ID, catégorie, réduction, etc.)</p></li><li><p>SKU</p></li><li><p>Prix total (hors taxes, taxes incluses)</p></li><li><p>Quantité totale</p></li><li><p>Informations géographiques (ville, pays, continent, localisation, région)</p></li></ul><p>Pour installer les données d'exemple, ouvrez la page <strong>Intégrations</strong> dans Kibana (recherchez "Integration" dans la barre de recherche supérieure), puis installez l'ensemble de données "Sample Data". Pour plus de détails, consultez la documentation ici : <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>Cet article a pour but de montrer combien il est facile de configurer Google MCP Toolbox pour se connecter à Elasticsearch et interagir avec l'index <strong>kibana_sample_data_ecommerce</strong> en utilisant le langage naturel.</p><h2>Google MCP Toolbox</h2><p>Google MCP Toolbox est un serveur MCP open source conçu pour faciliter l'interaction sécurisée et efficace des applications et des agents IA avec les bases de données. Auparavant appelé "GenAI Toolbox for Databases", le projet a été renommé après l'adoption d'une compatibilité totale avec le protocole <a href="https://www.anthropic.com/news/model-context-protocol">MCP</a> (Model Context Protocol). Son objectif est de supprimer les tâches complexes traditionnellement requises lors de la connexion d'agents à des bases de données en gérant en arrière-plan les pools de connexion, l'authentification, l'observabilité et d'autres aspects opérationnels.</p><p>Essentiellement, la boîte à outils permet aux développeurs de définir des outils réutilisables de haut niveau qui encapsulent les interactions avec la base de données. Ces outils peuvent ensuite être invoqués par n'importe quel client compatible MCP, tel qu'un agent IA, sans que le client n'ait à implémenter des requêtes SQL de bas niveau ni à gérer des connexions de base de données. Cette approche réduit considérablement la quantité de code répétitif nécessaire à la création d'agents compatibles avec les bases de données, permettant ainsi d'intégrer des opérations de données avancées en seulement quelques lignes de logique applicative. Une fois qu'un outil est défini, il peut être partagé entre plusieurs agents, frameworks, ou langages (Figure 1).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte90070297ee83546/6a16fa29964cea694b08b972/137cea290bb70ad5da21853f9a6358cef4cf7451-1248x1056.png" alt="" /><p>L'un des principaux avantages de la boîte à outils est le modèle de sécurité intégré. Les flux d'authentification tels que OAuth2 et OIDC sont pris en charge de manière native, ce qui permet aux développeurs d'éviter de manipuler ou de stocker des informations sensibles d'identification de base de données dans les agents. La plateforme fournit également des fonctionnalités d'observabilité via OpenTelemetry, y compris les métriques et le traçage, ce qui est essentiel pour le débogage, la surveillance et les déploiements en production. De manière générale, MCP Toolbox sert d'interface unifiée, sécurisée et extensible pour interagir avec vos données depuis n'importe quel système compatible MCP.</p><h2>Comment installer MCP Toolbox</h2><p>Vous pouvez installer le serveur MCP Toolbox sur Linux en utilisant la commande suivante :</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>Si vous souhaitez l'installer sur macOS ou Windows, vous pouvez suivre les instructions <a href="https://googleapis.github.io/genai-toolbox/getting-started/introduction/#installing-the-server">détaillées ici</a>.</p><h2>Configurer Toolbox pour Elasticsearch</h2><p>Pour configurer MCP Toolbox pour Elasticsearch, nous devons créer un fichier <strong>tools.yaml</strong> comme suit :</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>Vous devez remplacer la valeur <strong>&lt;insert-here-api-key&gt;</strong> par une clé API Elasticsearch valide. Si vous exécutez Elasticsearch localement avec la commande "start-local", vous trouverez la clé API dans le fichier .env généré par start-local, sous la variable <strong>ES_LOCAL_API_KEY</strong>. Si vous utilisez Elastic Cloud, vous pouvez générer une clé API en suivant la procédure <a href="https://www.elastic.co/docs/deploy-manage/api-keys/elastic-cloud-api-keys">décrite ici</a>.</p><p>Les outils précédents contiennent la requête ES|QL suivante pour Elasticsearch :</p><p>Si vous ne connaissez pas ES|QL, il s'agit d'un langage de requête développé par Elastic, similaire à SQL, qui peut être utilisé pour effectuer des recherches sur un ou plusieurs indices. Pour en savoir plus sur ES|QL, consultez la documentation officielle <a href="https://www.elastic.co/docs/reference/query-languages/esql">ici</a>.</p><p>La requête ci-dessus recherche toutes les commandes stockées dans l'index <strong>kibana_sample_data_ecommerce</strong> qui contiennent le nom du client spécifié, en utilisant le paramètre <strong>?name</strong> (le point d'interrogation indique un paramètre).</p><p>Le nom du client est défini dans la configuration YAML précédente en utilisant le type chaîne et la description "The customer name" (nom du client).</p><p>Cet outil peut être utilisé pour répondre à des questions sur les commandes d'un client, par exemple : <em>Combien de commandes le client Foo a-t-il passées en octobre 2025 ?</em></p><p>Les descriptions des outils et de leurs paramètres sont essentielles pour extraire les informations pertinentes de la requête en langage naturel de l'utilisateur. Cette extraction est réalisée à l'aide de la capacité d'<strong>appel de fonctions</strong> d'un grand modèle de langage (LLM). En pratique, un LLM peut déterminer quelle fonction (outil) doit être exécutée pour obtenir les informations nécessaires, ainsi que les paramètres appropriés pour cette fonction.</p><p>Pour plus d'informations sur les appels de fonctions, nous vous invitons à lire l'article <a href="https://www.elastic.co/search-labs/blog/function-calling-with-elastic">OpenAI function calling with Elasticsearch</a> (en anglais) par Ashish Tiwari.</p><h2>Exécuter le serveur Toolbox</h2><p>Vous pouvez exécuter le serveur MCP Toolbox à l'aide du fichier "tools.yaml" précédent avec la commande suivante :</p>./toolbox --tools-file tools.yaml --ui<p>Le paramètre<strong> –ui</strong> exécute une application web à l'adresse <a href="http://127.0.0.1:5000/ui">http://127.0.0.1:5000/ui</a> (Figure 2).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0fb3953fae603572/6a16fa2aa6c2b92763e794fb/3caf2339b632bafd5847af1ed8b33b518a25b8a2-1600x314.png" alt="" /><p>Sélectionnez <strong>Tools</strong> (Outils) &gt; <strong>customer-orders</strong> et insérez un nom de client dans le paramètre <strong>name</strong> (par ex. Gwen Sanders), puis cliquez sur le bouton <strong>Run Tool</strong> (Exécuter l'outil). Une réponse JSON devrait s'afficher comme illustré dans la figure 3.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltca02df8c78cb39ff/6a16fa2c961e6909b5c4cd22/b167e0142afb8919d9cedf6d0fa431d33d0e55f8-1600x933.png" alt="" /><p>La configuration est terminée et MCP Toolbox peut exécuter l'outil <strong>customer-orders</strong> pour communiquer avec Elasticsearch, en lançant la requête ES|QL.</p><h2>Utiliser MCP Toolbox avec Gemini CLI</h2><p>Nous pouvons utiliser n'importe quel client MCP pour communiquer avec MCP Toolbox for Databases. Par exemple, nous pouvons choisir <a href="https://github.com/google-gemini/gemini-cli">Gemini CLI</a>, un outil en ligne de commande permettant d'utiliser Gemini. Si vous souhaitez installer Gemini CLI, suivez les instructions <a href="https://geminicli.com/docs/get-started/installation/">indiquées ici</a>.</p><p>Gemini CLI propose une extension préconfigurée pour MCP Toolbox, disponible sur <a href="https://github.com/gemini-cli-extensions/mcp-toolbox">gemini-cli-extensions/mcp-toolbox</a>. Vous pouvez installer cette extension en exécutant la commande suivante :</p>gemini extensions install https://github.com/gemini-cli-extensions/mcp-toolbox<p>Après l'installation, vous devez accéder au répertoire dans lequel vous avez stocké le fichier de configuration "tools.yaml" pour MCP Toolbox et exécuter Gemini CLI comme suit (cette étape est nécessaire pour que Gemini CLI soit automatiquement configuré avec MCP Toolbox) :</p>gemini<p>Un message de sortie devrait s'afficher comme illustré dans la figure 4.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf7245c10b9e32cd6/6a16fa2d964cea073208b976/0f22df6d3da13c1dc50dcb560414fa7c630eb9a7-1434x341.png" alt="" /><p>Vous pouvez vérifier si la boîte à outils MCP est connectée en utilisant la commande suivante :</p>/mcp list<p>Vous devriez voir s'afficher <strong>mcp_toolbox</strong> avec les outils<strong> customer-orders</strong> répertoriés (Figure 5).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte857b42dbe604203/6a16fa2f8b73cb531b189e33/97edbc40de9e44f469f6f3a09427532be167de0e-493x155.png" alt="" /><p>Si MCP Toolbox est connecté à Gemini CLI, nous pouvons maintenant poser quelques questions, telles que : "<em>Indiquez-moi les commandes pour la cliente Gwen Sanders</em>". Gemini CLI demande alors l'autorisation d'exécuter l'outil "customer-orders" depuis le serveur mcp_toolbox (voir Figure 6).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfb7ea752c1a39da7/6a16fa30cdacbfdf937d27ff/c052f3b5e49436903b804280c0065f67ee02444b-1432x284.png" alt="" /><p>Après confirmation, Gemini CLI exécute la requête dans MCP Toolbox, reçoit une réponse JSON et l'utilise pour mettre en forme la réponse (Figure 7).</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb9f6e04987137a9f/6a16fa320811ae2297e9fef7/7ea5128f1705951c2757af6da4b456d394d4a080-1432x734.png" alt="" /><p>La réponse de Gemini CLI indique que Gwen Sanders a passé une seule commande de 2 produits, pour un prix total de 132 EUR.</p><h2>SDK MCP Toolbox</h2><p>Google MCP Toolbox propose également un SDK pour accéder à toutes les fonctionnalités depuis un programme écrit en Go, Python et Javascript.</p><p>Par exemple, le SDK Python est disponible sur Github à la page suivante : <a href="https://github.com/googleapis/mcp-toolbox-sdk-python">https://github.com/googleapis/mcp-toolbox-sdk-python</a>.</p><p>Nous devons créer un agent simple pour nous connecter à MCP Toolbox. Nous devons installer les packages suivants :</p>pip install toolbox-core
pip install google-adk<p>Et créer un nouveau projet d'agent à l'aide la commande suivante :</p>adk create my_agent<p>Cela créera un nouveau répertoire nommé <strong>my_agent</strong> contenant un fichier <strong>agent.py</strong>.</p><p>Mettez à jour le fichier <strong>my_agent/agent.py</strong> avec le contenu suivant pour vous connecter à 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>Créez un fichier <strong>.env</strong> avec votre clé API Google :</p>echo 'GOOGLE_API_KEY="YOUR_API_KEY"' &gt; my_agent/.env<p>Enfin, nous pouvons lancer l'exécution de l'agent et observer les résultats. Pour ce faire, exécutez la commande suivante :</p>adk run my_agent<p>Ou, vous pouvez le servir via une interface web :</p>adk web --port 8000<p>Dans les deux cas, vous pouvez interagir avec MCP Toolbox à l'aide d'une interface de questions-réponses. Par exemple, vous pouvez poser la question précédente : <em>Indiquez-moi les commandes de la cliente Gwen Sanders</em>.</p><p>Pour plus d'informations sur les différents SDK, consultez cette <a href="https://googleapis.github.io/genai-toolbox/sdks/">page de documentation</a>.</p><h2>Conclusion</h2><p>Dans cet article, nous avons démontré l'intégration d'Elasticsearch pour Google MCP Toolbox for Databases. À l'aide d'un simple fichier de configuration YAML, nous pouvons définir un ensemble d'outils qui traduisent les questions en langage naturel en requêtes Elasticsearch en utilisant le langage ES|QL.</p><p>Nous avons montré comment interagir avec l'ensemble de données "kibana_sample_data_ecommerce", qui contient des commandes provenant d'un site web. Avec ce fichier de configuration, nous pouvons simplement lancer l'exécution du serveur MCP Toolbox et nous y connecter depuis n'importe quel client MCP.</p><p>Enfin, nous avons démontré comment utiliser Gemini CLI en tant que client pour nous connecter à MCP Toolbox for Databases et interroger les données e-commerce stockées dans Elasticsearch. Nous avons exécuté une requête en langage naturel pour récupérer des informations sur les commandes d'un client spécifique identifié par son nom.</p><p>À mesure que l'écosystème MCP se développe, ce modèle – des définitions d'outils légères soutenues par une infrastructure sécurisée et prête pour la production – crée de nouvelles possibilités pour construire des agents de plus en plus performants et sensibles aux données avec un minimum d'efforts. Qu'il s'agisse d'expérimenter localement les ensembles de données Elastic ou d'intégrer des fonctionnalités de recherche dans une application plus vaste, MCP Toolbox fournit une base fiable et extensible pour interagir avec vos données Elasticsearch en langage naturel.</p><p>Pour en savoir plus sur le développement d'applications d'IA agentique, consultez l'article <a href="https://search-labs-redesign.vercel.app/search-labs/blog/ai-agentic-workflows-elastic-ai-agent-builder">Construire des workflows d'IA agentique avec Elasticsearch</a> par Anish Mathur et Dana Juratoni.</p><p>Pour plus d'informations sur Google MCP Toolbox, consultez la page <a href="https://googleapis.github.io/genai-toolbox/getting-started/introduction/">vhttps://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 agentique]]></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 ES|QL aux objets PHP]]></title>
    <description><![CDATA[Apprenez à exécuter et à gérer les requêtes ES|QL en PHP. Suivez ce guide pour mapper les résultats ES|QL vers un objet PHP ou une classe personnalisée.]]></description>
    <content:encoded><![CDATA[<p>À partir d'elasticsearch-php <a href="https://github.com/elastic/elasticsearch-php/releases/tag/v8.13.0">v8.13.0</a>, il est possible d'exécuter des requêtes <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql.html">ES|QL</a> et de mapper le résultat à un objet PHP de <a href="https://www.php.net/manual/en/class.stdclass.php">stdClass</a> ou d'une classe personnalisée.</p><h2>ES|QL</h2><p><a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql.html">ES|QL</a> est un nouveau langage de requête Elasticsearch introduit dans Elasticsearch 8.11.0. Pour l'instant, il est disponible en aperçu technique. Il offre un moyen puissant de filtrer, de transformer et d'analyser les données stockées dans Elasticsearch.</p><p>Il utilise les tuyaux "" (<code>|</code>) pour manipuler et transformer les données étape par étape. Cette approche permet aux utilisateurs de composer une série d'opérations, où la sortie d'une opération devient l'entrée de la suivante, ce qui permet des transformations et des analyses de données complexes.</p><p>Par exemple, la requête suivante renvoie les 3 premiers documents (lignes) de l'index <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 produit des tableaux" /><h2>Cas d'utilisation : Fonctionnalités ES|QL dans le client PHP officiel</h2><p>Pour illustrer les fonctionnalités ES|QL développées dans le client PHP officiel, nous avons stocké dans Elasticsearch un <a href="https://github.com/elastic/elasticsearch-php-examples/blob/main/examples/ESQL/data/books.csv">fichier CSV</a> de 81 828 livres (54,4 Mo) contenant les informations suivantes :</p>Title;Descrition;Author;Year;Publisher;Ratings
<p>Nous avons extrait cette liste de l' ensemble de <a href="https://www.kaggle.com/datasets/mohamedbakhet/amazon-books-reviews">données publiques Amazon Books Reviews.</a></p><p>Nous avons créé un index <code>books</code> avec les mappings Elasticsearch suivants :</p>'mappings' : {
    'properties': {
        'title': {
            'type': 'text'
        },
        'description': {
            'type': 'text'
        },
        'author': {
            'type': 'text'
        },
        'year': {
            'type': 'short'
        },
        'publisher': {
            'type': 'keyword'
        },
        'rating': {
            'type': 'half_float'
        }
    }
}
<p>La valeur <code>rating</code> est la moyenne des avis de classement tirés du fichier <a href="https://www.kaggle.com/datasets/mohamedbakhet/amazon-books-reviews?select=Books_rating.csv">Books_rating.csv</a> de 2,9 Go.</p><p>Vous trouverez <a href="https://github.com/elastic/elasticsearch-php-examples/blob/main/examples/ESQL/bulk.php">ici</a> le script PHP que nous avons utilisé pour importer en masse tous les livres dans Elasticsearch. L'opération en bloc a pris 7 secondes et 28 Mo de RAM en utilisant PHP 8.2.17. Avec le mappage proposé, la taille de l'index dans Elasticsearch est d'environ 62 Mo.</p><h2>Mapper les résultats ES|QL vers un objet PHP ou une classe personnalisée</h2><p>Nous pouvons exécuter une requête ES|QL en PHP en utilisant le point de terminaison <code>esql()-&gt;query()</code>. Le résultat de cette requête est une structure de données sous forme de tableau. Ceci est exprimé en JSON à l'aide des champs <code>columns</code> et <code>values</code>. Dans le champ <code>columns</code>, nous avons les définitions <code>name</code> et <code>type</code>.</p><p>Voici un exemple de requête ES|QL permettant d'obtenir les 10 meilleurs livres écrits par Stephen King, classés par ordre d'appréciation des utilisateurs :</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>Le résultat JSON d'Elasticsearch se présente comme suit :</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>Dans cet exemple, nous avons 6 propriétés (auteur, description, éditeur, note, titre, année) liées à un livre et 10 résultats, tous des livres de Stephen King.</p><p>Une liste de tous les types pris en charge dans ES|QL est présentée <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/esql-limitations.html#esql-supported-types">ici.</a></p><p>L'objet de réponse <code>$result</code> est accessible sous la forme d'un tableau, d'une chaîne de caractères ou d'un objet (voir <a href="https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/connecting.html#client-usage">ici</a> pour plus d'informations).</p><p>L'interface objet permet d'accéder aux valeurs à l'aide de propriétés et d'index. Par exemple, <code>$result-&gt;values[0][4]</code> renvoie le titre (4) du premier livre (0) de la liste, <code>$result-&gt;values[1][3]</code> renvoie le rang (3) du deuxième livre (1), etc. Rappelez-vous que l'index d'un tableau en PHP commence à zéro.</p><p>Cette interface peut être suffisante pour certains cas d'utilisation, mais la plupart du temps, nous aimerions avoir un tableau d'objets comme résultat.</p><p>Pour convertir le résultat en un tableau d'objets, nous pouvons utiliser la nouvelle fonction <a href="https://github.com/elastic/elasticsearch-php/issues/1398">mapTo()</a> d'elasticsearch-php.</p><p>Cette fonction est disponible directement dans l'<a href="https://github.com/elastic/elasticsearch-php/blob/main/src/Response/Elasticsearch.php">objet de réponse Elasticsearch</a>. Cela signifie que vous pouvez y accéder de la manière suivante :</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>Si vous disposez d'une classe de livre personnalisée, vous pouvez mapper le résultat en l'utilisant, comme suit :</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>Si votre classe possède d'autres propriétés en plus de celles incluses dans le résultat ES|QL, cela fonctionnera également. La fonction <code>mapTo()</code> n'utilisera que les propriétés renvoyées sous forme de colonnes dans le résultat ES|QL.</p><p>Vous pouvez télécharger tous les exemples présentés dans cet article <a href="https://github.com/elastic/elasticsearch-php-examples/tree/main/examples/ESQL">ici.</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>