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 : gestion des médias et meta description via MCP

Joomla Mcp Images Meta Seo

Connecter Claude Desktop à Joomla via MCP, c'est bien. Mais pouvoir uploader des images directement depuis une conversation avec l'IA, définir les images d'introduction et d'article, et renseigner la meta description SEO sans jamais ouvrir l'administration Joomla — c'est encore mieux. Dans cet article, nous détaillons comment nous avons développé et perfectionné ces fonctionnalités chez web54, avec le code exact et les pièges à éviter.

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.

Uploader des images depuis Claude : deux méthodes

Le serveur MCP Joomla expose deux outils d'upload d'images, chacun adapté à un cas d'usage différent.

Méthode 1 — Depuis une URL distante

Idéal pour récupérer des images depuis Unsplash, une banque de photos ou n'importe quelle URL publique :

"Uploade cette image dans le dossier mcp, nom 'mon-image' : https://images.unsplash.com/photo-xxx"

Le serveur télécharge l'image, détecte automatiquement l'extension (.jpg, .png, .webp...) depuis le Content-Type HTTP, et l'envoie encodée en base64 à l'API REST Joomla. Le dossier destination est créé automatiquement s'il n'existe pas.

server.tool('uploader_image', 'Uploader une image depuis une URL distante',
  {
    url:     z.string(),
    nom:     z.string(),
    dossier: z.string().optional(),
  },
  async ({ url, nom, dossier = 'articles' }) => {
    const imageRes = await fetch(url);
    const ct  = imageRes.headers.get('content-type') || 'image/jpeg';
    const ext = ct.includes('png') ? 'png' : ct.includes('webp') ? 'webp'
              : ct.includes('gif') ? 'gif' : 'jpg';
    const base64 = Buffer.from(await imageRes.arrayBuffer()).toString('base64');
    // ✅ Pas de préfixe images/ — Joomla l'ajoute automatiquement
    await joomla('/media/files', 'POST', {
      path: `${dossier}/${nom}.${ext}`,
      content: base64
    });
  }
);

Méthode 2 — Depuis votre PC Windows

Puisque le serveur MCP tourne localement sur votre machine, il peut lire directement vos fichiers. Il suffit de donner le chemin absolu :

"Uploade C:\Users\serge\Pictures\photo.jpg dans le dossier produits"
server.tool('uploader_image_locale', 'Uploader une image depuis votre PC',
  {
    chemin_local: z.string(),
    nom:          z.string().optional(),
    dossier:      z.string().optional(),
  },
  async ({ chemin_local, nom, dossier = 'articles' }) => {
    const buffer   = await fs.readFile(chemin_local);
    const ext      = path.extname(chemin_local).replace('.', '').toLowerCase() || 'jpg';
    const basename = nom ?? path.basename(chemin_local, path.extname(chemin_local));
    const base64   = buffer.toString('base64');
    // ✅ Pas de préfixe images/ — Joomla l'ajoute automatiquement
    await joomla('/media/files', 'POST', {
      path: `${dossier}/${basename}.${ext}`,
      content: base64
    });
  }
);
Le piège du double préfixe images/
L'API Joomla ajoute automatiquement images/ aux chemins médias. Si vous envoyez images/dossier/fichier.jpg, Joomla créera le fichier dans images/images/dossier/ — invisible dans la médiathèque, sans aucun message d'erreur. L'API répond même "succès". La règle absolue : n'envoyez que dossier/fichier.jpg.

Définir les images d'article et la meta description via PATCH

La deuxième avancée majeure est la possibilité de définir directement via Claude les images d'introduction, les images d'article complet et la meta description SEO. La documentation API Joomla confirme que le PATCH sur /content/articles/{id} accepte ces champs.

Voici l'outil modifier_article enrichi :

server.tool('modifier_article', 'Modifier un article',
  {
    id:             z.number(),
    titre:          z.string().optional(),
    contenu:        z.string().optional(),
    publie:         z.boolean().optional(),
    metadesc:       z.string().optional(),
    metakey:        z.string().optional(),
    image_intro:    z.string().optional(),
    image_fulltext: z.string().optional(),
  },
  async ({ id, titre, contenu, publie, metadesc, metakey, image_intro, image_fulltext }) => {
    const body = {};
    if (titre    !== undefined) body.title     = titre;
    if (contenu  !== undefined) { body.introtext = contenu; body.fulltext = ''; }
    if (publie   !== undefined) body.state      = publie ? 1 : 0;
    if (metadesc !== undefined) body.metadesc   = metadesc;
    if (metakey  !== undefined) body.metakey    = metakey;
    if (image_intro || image_fulltext) {
      body.images = {
        image_intro:           image_intro    ?? '',
        image_intro_alt:       '',
        image_intro_caption:   '',
        float_intro:           '',
        image_fulltext:        image_fulltext ?? image_intro ?? '',
        image_fulltext_alt:    '',
        image_fulltext_caption:'',
        float_fulltext:        ''
      };
    }
    return ok(await joomla(`/content/articles/${id}`, 'PATCH', body));
  }
);

Concrètement, après avoir créé un article, il suffit d'une seule demande à Claude pour tout compléter :

"Sur l'article 512, définis l'image intro sur images/mcp/mon-image.jpg, et la meta description sur 'Découvrez comment connecter Claude Desktop à Joomla 5 via MCP...'"
Note SEO Joomla — Le champ image_intro attend le chemin complet depuis la racine du site, par exemple images/mcp/mon-image.jpg. L'API Joomla retourne l'URL absolue complète dans la réponse, ce qui permet de vérifier immédiatement que le champ a bien été enregistré.

Workflow complet en pratique

Voici le workflow type tel qu'il est maintenant utilisé chez web54 pour la création d'un article :

  1. Créer l'article"Crée un article intitulé '...' dans la catégorie 17, non publié"
  2. Uploader l'image"Uploade cette image dans le dossier mcp, nom 'mon-article' : https://..."
  3. Compléter les métadonnées"Sur l'article 512, image intro images/mcp/mon-article.jpg, meta description '...', mots-clés 'développement Joomla, IA Claude, SEO Joomla'"
  4. Relecture et publication → ouvrir l'admin Joomla uniquement pour la relecture finale et la publication.

L'ensemble de ce workflow — création, image, SEO — se fait en moins d'une minute, directement depuis Claude Desktop, sans jamais quitter la conversation.


Ce que le développement Joomla + IA Claude change concrètement

Pour une agence web comme web54, qui gère plusieurs sites Joomla pour ses clients, les bénéfices sont immédiats. La gestion des médias et la rédaction SEO optimisée représentent une part significative du temps de production de contenu. Pouvoir déléguer ces tâches à Claude — qui comprend le contexte, suggère des meta descriptions adaptées aux mots-clés cibles, et choisit les bons dossiers de médias — représente un gain de productivité réel.

Les mots-clés SEO Joomla, développement Joomla et IA Claude peuvent désormais être intégrés directement dans le flux de travail de création de contenu, sans étape supplémentaire.

Prêt à mettre en place ce workflow sur votre site Joomla ?

Le tutoriel complet avec le code source intégral du serveur MCP est disponible ici :
Connecter Claude Desktop à Joomla 5 via MCP : le tutoriel complet

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