LibreModular-MCP

MCP universel écrit en Rust, avec un Hub qui n’expose que deux outils

Quand un modèle pilote une application de bureau avec un outil par geste, chaque geste coûte un aller-retour. Le Hub expose deux outils : un script fait tout le travail en un appel. GIMP, Krita, Blender, Inkscape et LibreOffice fonctionnent aujourd’hui, chacune par un module et un pont ; le Hub est conçu pour en accueillir un maximum dans un seul serveur.

Essayer la démonstration

Schéma : un client MCP appelle le Hub, qui expose deux outils, execute_script et get_state, et fait passer chaque script par un module et un pont jusqu'à une application : GIMP, Krita, Blender, Inkscape ou LibreOffice. Schéma : un client MCP appelle le Hub, qui expose deux outils, execute_script et get_state, et fait passer chaque script par un module et un pont jusqu'à une application : GIMP, Krita, Blender, Inkscape ou LibreOffice.
Le modèle, dessiné en étincelle de lumière : ses rayons sont les lignes qu'il a écrites au Hub et celles qu'il en a lues ; les herbes sont tissées des phrases qu'on lui a données et de lignes de script.
Une frise : l'étincelle du modèle, les deux outils execute_script et get_state, puis cinq vignettes sur une même ligne : une scène 3D pour Blender, une étincelle sur un damier pour GIMP, un paysage peint au crépuscule pour Krita, un dessin d'orbites pour Inkscape et une lettre pour LibreOffice.
Un modèle, deux outils, cinq applications : chaque vignette montre ce que le Hub a fait dans son application.

Un script envoyé, la réponse du Hub

Ce script dessine un histogramme de trois barres dans un document Inkscape. Un client l’a envoyé en un seul appel execute_script, et le bloc qui suit est la réponse du Hub. La démonstration donne un client de 25 lignes et chaque étape pour rejouer une exécution comme celle-ci.

python · Script écrit
import json
import os

import inkex

document = inkex.load_svg(os.environ["LMM_DOCUMENT"])
layer = document.getroot().add(inkex.Layer.new("Chart"))
for index, value in enumerate([3, 7, 5]):
    layer.add(inkex.Rectangle.new(20 + index * 30, 100 - value * 10, 20, value * 10))
document.write(os.environ["LMM_DOCUMENT"])
print("LMM_RESULT: " + json.dumps({"bars": len(layer)}))
Réponse du Hub
{
  "app": "inkscape",
  "duration_ms": 151,
  "error": null,
  "result": {
    "bars": 3
  },
  "status": "ok",
  "stderr": "",
  "stdout": "",
  "truncated": false
}

Inkscape 1.4 l’a exécuté en mode cli, sans fenêtre : le Hub a lancé un processus Python pour le script et a renvoyé, comme result, la valeur que le script avait imprimée après LMM_RESULT: .

Deux outils, un module par application

Voici LibreModular-MCP. Le Hub est un unique binaire Rust qui donne au modèle exactement deux outils. execute_script exécute un script Python complet dans une application et renvoie ce que le script a imprimé, son result, ou la trace d’erreur propre à l’application. get_state renvoie ce qui est ouvert dans l’application. Un module côté Hub et un pont côté application atteignent GIMP, Krita, Blender, Inkscape et LibreOffice ; le Hub lui-même ne connaît aucune de leurs interfaces.

Ces cinq applications sont celles qui ont été essayées, pas le périmètre du Hub : une autre application s’ajoute par un module, un pont et son guide, comme le décrit CONTRIBUTING.md, et le code est sous licence MIT.

Le démarrage rapide crée la configuration du Hub, Brancher votre modèle le déclare dans Claude Code ou dans opencode, et l’installation donne le paquet de chaque famille Linux.

Où aller ensuite

  • Démonstration

    Un client de 25 lignes lance le Hub, envoie un script à Inkscape et affiche chaque réponse, sans client MCP et sans fenêtre.

  • Installation

    Une commande par famille Linux pour installer le Hub depuis son paquet, l'installeur Windows, le niveau atteint par chacun, sa somme de contrôle, et la compilation depuis les sources.

  • Architecture

    Le Hub, ses deux outils, un module et un pont par application, les trois modes, et un script mesuré contre des appels séparés.

  • Sécurité

    Ce que le Hub borne, les risques qui restent, ce qui quitte la machine, et les mesures rejouées pour cette page.

  • Compatibilité

    Pour chaque application, la version essayée, la commande qui l'a lancée et ce qui n'a pas été essayé.

  • Applications

    Une recette réelle par application : le texte donné au modèle, son script, les réponses du Hub et le fichier produit.