12 rue de Blénod, 54700 Maidières +33 6 87 42 95 30 Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. Lun-Ven: 8h/12h 14h/17h

Tutoriels inédits sur le CMS Joomla

Joomla et IA Claude : gérer les tags automatiquement via MCP

Joomla Mcp Tags Ia Claude

Après la gestion des articles, des médias et des meta descriptions, voici l'étape suivante dans l'intégration de l'IA Claude avec Joomla via MCP : la gestion intelligente des tags. L'objectif est simple — dire à Claude "ajoute les tags MCP, IA Claude et Joomla à cet article" et qu'il s'occupe de tout : rechercher les tags existants, créer ceux qui manquent, et les associer à l'article. Sans jamais demander à l'utilisateur un seul ID.

Cet article fait partie de la série MCP Joomla :
Connecter Claude Desktop à Joomla 5 via MCP : le tutoriel complet
Si vous débutez, commencez par là — code source et installation pas à pas inclus.

Le problème des tags en langage naturel

Les tags Joomla sont identifiés par des IDs numériques dans l'API REST. Demander à un utilisateur de connaître ces IDs serait une mauvaise expérience. Mais il y a un autre piège, plus subtil : les variantes orthographiques.

"IA Claude", "Claude IA", "ia claude" et "claude IA" sont techniquement quatre tags différents dans Joomla — mais ils désignent la même chose. Sans normalisation, chaque variante créerait un doublon.

La solution mise en place repose sur une fonction de normalisation qui :

  • Passe tout en minuscules
  • Supprime les accents
  • Trie les mots par ordre alphabétique

Ainsi "IA Claude", "Claude IA" et "claude ia" donnent tous claude ia après normalisation → même tag trouvé, aucun doublon.

function normalizeTag(str) {
  return str
    .toLowerCase()
    .trim()
    .normalize('NFD').replace(/[\u0300-\u036f]/g, '')
    .split(/\s+/)
    .sort()
    .join(' ');
}

L'outil assigner_tags : zéro ID, zéro doublon

L'outil MCP assigner_tags fonctionne en quatre étapes automatiques :

  1. Récupération de tous les tags existants via l'API Joomla (/tags?page[limit]=500)
  2. Recherche normalisée — pour chaque tag demandé, on compare les formes normalisées
  3. Création automatique des tags absents avec un alias URL propre
  4. Association à l'article via un PATCH sur /content/articles/{id} avec un tableau d'integers
server.tool('assigner_tags',
  'Assigner des tags à un article par leur nom.',
  {
    article_id: z.number(),
    tags:       z.array(z.string()),
  },
  async ({ article_id, tags }) => {

    const res      = await joomla('/tags?page[limit]=500');
    const existing = res.data ?? [];
    const tagIds   = [];
    const matched  = [];
    const created  = [];

    for (const name of tags) {
      const normName = normalizeTag(name);
      const candidates = existing.filter(t =>
        normalizeTag(t.attributes.title) === normName
      );

      if (candidates.length === 1) {
        matched.push(candidates[0].attributes.title);
        tagIds.push(parseInt(candidates[0].attributes.id)); // ✅ integer simple
      } else {
        const alias  = normName.replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
        const result = await joomla('/tags', 'POST', {
          title:       name.trim(),
          alias:       alias,
          language:    '*',
          published:   1,
          parent_id:   1,   // ✅ obligatoire
          description: ''   // ✅ obligatoire
        });
        created.push(name.trim());
        tagIds.push(parseInt(result.data.attributes.id)); // ✅ integer simple
      }
    }

    // ✅ Format tableau d'integers — seul format accepté par l'API Joomla
    if (tagIds.length > 0) {
      await joomla(`/content/articles/${article_id}`, 'PATCH', { tags: tagIds });
    }

    return ok({ success: true, article_id, tags_matches: matched, tags_crees: created });
  }
);
Trois points critiques découverts en conditions réelles :
parent_id: 1 : obligatoire à la création d'un tag. Sans ce champ, Joomla renvoie "Invalid field: Parent".
description: '' : champ requis en base même si vide. Sans lui : "Field 'description' doesn't have a default value".
tags: [11, 12] : le PATCH Joomla n'accepte qu'un tableau d'integers simples, pas [{"id":11}]. Ce dernier format est accepté sans erreur mais ignoré silencieusement.

Règle d'or : les tags toujours en dernier

Le PATCH Joomla sur un article efface les tags si le champ tags n'est pas réenvoyé. Il est donc impératif d'assigner les tags après toutes les autres modifications (contenu, image, meta description). L'API ne permet pas de lire les tags existants d'un article pour les préserver automatiquement.


En pratique : ce que vous dites à Claude

Une fois l'outil installé et Claude Desktop redémarré, la gestion des tags se fait en langage naturel :

"Ajoute les tags MCP Joomla, IA Claude et Développement Joomla à l'article 514"

Claude appelle automatiquement assigner_tags, recherche chaque tag, crée ceux qui n'existent pas encore, et confirme les associations réalisées avec un récapitulatif clair : tags trouvés, tags créés, éventuelles ambiguïtés.

Conseil rédactionnel — Homogénéisez vos tags dès le départ avec une convention simple (ex: toujours "MCP Joomla" plutôt que "Joomla MCP"). La normalisation gère la casse et l'ordre des mots, mais une convention explicite reste la meilleure protection contre les doublons.

Workflow complet : article, image, SEO et tags en une conversation

Voici le workflow complet tel qu'il est pratiqué chez web54 pour la création d'un article optimisé :

  1. "Crée un article sur [sujet] dans la catégorie 17, non publié"
  2. "Uploade cette image dans le dossier mcp, nom 'mon-image' : https://..."
  3. "Sur l'article X, image intro images/mcp/mon-image.jpg, meta description '...', mots-clés '...'"
  4. "Ajoute les tags MCP Joomla et IA Claude à l'article X" ← toujours en dernier

En moins de deux minutes, l'article est structuré, illustré, optimisé SEO et correctement tagué — sans jamais quitter Claude Desktop.

Retrouvez le tutoriel complet et le code source du serveur MCP :

Connecter Claude Desktop à Joomla 5 via MCP : le tutoriel complet

Article rédigé par Serge Billon — web54.fr | Agence web Joomla en Lorraine