---
title: Création de tool directement dans openwebui
author: Frederic AOUSTIN
version: 1.O
last_date: 05/07/2026
---

# Création de tool directement dans openwebui

![category](developpement)
![tag](python)
![tag](ia)

Il est possible de créer des **tools** dans **openWebUI**. Cet élément permet par la suite d'*automatiser*, *simplifier* des demandes qu'on fait à une IA.

## Définition

Un **tool** est un simple code *python* qui sera lancé par *OpenWebUI* à la demande du LLM.
Il faut donc comme pour un serveur mcp bien définir les entrée / sortie et l'usage du tools

Le code se rapproche d'ailleurs de celui d'un MCP

## Exemple

Nous allons traiter un exemple concert: envoyer un message à toutes les personnes qui ne sont pas à la maison ... facile ;-)

### Les outils

J'ai crée dans **openWebUi** un modèle qui utilise des outils provenant de deux serveurs *mcp* personnel (mcphass et mcpfree).
Dans ces serveurs ont retrouve deux outils qui vont nous être utile

- get_localisation (dans mcphass) qui permet d'obtenir pour chaque personne de la famille sa localisation. Cette localisation peut être *maison* si sa position géographique correspond à la maison.
- send_sms (dans mcpfree) qui permet d'envoyer un message à une personne de la famille sur son téléphone. Cet outil prend en paramètre le nom de l'utilisateur et le message.

C'est serveur sont accessibles via un serveur [mcpo](./?md=20260628122600) 

On voit déjà l'algorithme:

- demande la liste de localisation
- boucles sur les localisations
- si une localisation est différente de maison garde le nom de l'utilisateur
- pour chaque utilisateur identifié envoi un message

### Le tool

```python
"""
title: Family Messaging
description: Contacte les membres de la famille qui ne sont pas à la maison
version: 1.1.0
author: ChatGPT
required_open_webui_version: 0.4.0
"""

import os
import requests
from datetime import datetime
from pydantic import BaseModel, Field
import json


from typing import List, Dict, Optional


class Tools:

    def _get_family_locations(self):
        response = requests.post(
            "http://mcpo:8000/mcphass/get_localisation",
            headers={
                "Authorization": f"Bearer XXXXXXXXXXXXXX",
                "Content-Type": "application/json",
            },
            json={},
            timeout=60,
        )
        response.raise_for_status()
        return response.json()

    def _send_message(self, name: str, message: str):
        response = requests.post(
            "http://mcpo:8000/mcpfree/send_sms",
            headers={
                "Authorization": f"Bearer XXXXXXXXXXXXXXXXXXXXXXXXX",
                "Content-Type": "application/json",
            },
            json={"username": name, "message": message},
            timeout=60,
        )
        response.raise_for_status()
        return response.json()

    async def message_people_not_at_home(
        self, message: str = "Où es-tu ?", dry_run: bool = False
    ) -> dict:
        """
        Envoie un message à tous les membres de la famille qui ne sont pas à la maison.
        """

        people = self._get_family_locations()

        targets = []

        for person in people["locations"]:
            name = person.get("name")
            location = person.get("location")
            if location != "maison":
                targets.append({"name": name, "location": location})

        sent = []
        if not dry_run:
            for person in targets:
                result = self._send_message(person["name"], message)
                sent.append(
                    {
                        "name": person["name"],
                        "location": person["location"],
                        "result": result,
                    }
                )

        return {
            "success": True,
            "dry_run": dry_run,
            "message": message,
            "targets": targets,
            "sents": sent,
            "count_targets": len(targets),
            "count_sent": 0 if dry_run else len(sent),
        }

```

### le test


J'ai pu essayer avec succès les prompts suivant:

- Envoie "Test Papa ?" à ceux qui ne sont pas à la maison
- Envoie "Test Papa ?" à ceux qui sont à la maison


## Retour d'experience

Il faut vite prendre en compte quelques élements:

- il n'est pas possible de réutuiliser les serveurs mcp déclaré
- pas de git
- les secrets sont visibles

En sommes c'est utile pour de l'appoint
