Démarrage rapide
Sur cette page
Cinq étapes mènent d’un Hub installé à son premier script exécuté : créer la configuration et le jeton, activer Inkscape, déclarer le Hub dans votre client MCP, vérifier ce que le Hub voit, envoyer un script. Cette page s’adresse aux ingénieurs qui ont déjà le paquet ; Inkscape n’a besoin d’aucun pont. Sinon, commencez par l’installation.
Créer la configuration et le jeton
Lancez ceci une fois, avec votre propre utilisateur :
libremodular-mcp init
La commande imprime une ligne par répertoire et par fichier qu’elle crée ; cette page écrit $HOME pour le début de chaque chemin :
directory ready: $HOME/.config/libremodular-mcp
directory ready: $HOME/.local/state/libremodular-mcp
configuration created: $HOME/.config/libremodular-mcp/config.toml
token created: $HOME/.config/libremodular-mcp/token
Les deux fichiers ont les droits 600. Lancé une seconde fois, init les laisse tels quels et dit configuration exists, unchanged et token exists, unchanged.
Activer Inkscape
Après init, toutes les applications sont désactivées. Cette commande active Inkscape :
sed -i '/^\[apps.inkscape\]/,/^$/ s/enabled = false/enabled = true/' ~/.config/libremodular-mcp/config.toml
L’entrée de config.toml se lit alors ainsi :
[apps.inkscape]
enabled = true
mode = "cli"
Inkscape 1.4 est la version avec laquelle les commandes de cette page ont été exécutées. En mode cli, le Hub lance un processus Python par script : il n’y a donc aucun pont à démarrer. GIMP, Krita, Blender et LibreOffice sont atteints par un pont que vous lancez à la main ; chaque guide donne les commandes : GIMP, Krita, Blender et LibreOffice.
Déclarer le Hub dans votre client MCP
Le client exécute le Hub comme une commande, avec l’argument serve. Avec le paquet, la commande est /usr/bin/libremodular-mcp ; compilé depuis les sources, c’est le chemin absolu de target/release/libremodular-mcp dans votre clone.
{
"mcpServers": {
"libremodular": {
"command": "/usr/bin/libremodular-mcp",
"args": ["serve"]
}
}
}
Le Hub a besoin de la variable XDG_RUNTIME_DIR, qu’une session de bureau définit. Sans elle, libremodular-mcp serve s’arrête aussitôt avec error: XDG_RUNTIME_DIR is not set; refusing to write volatile files elsewhere.
Brancher votre modèle donne cette entrée pour Claude Code et pour opencode, chacune essayée dans le client, avec la réponse à get_state que le client a reçue.
Faire le premier appel
Le guide du modèle fait de get_state sur hub le premier appel : il liste les applications que le Hub peut atteindre. Demandez-le à votre modèle, ou lancez le client de la démonstration, dont la première réponse est celle-ci :
{
"app": "hub",
"app_version": "0.1.0",
"bridge_version": null,
"captured_at": "2026-10-21T07:57:39.858Z",
"connected": true,
"content_origin": "hub",
"screenshot": null,
"state": {
"modules": [
{
"app_version": "1.4",
"bridge_version": null,
"connected": true,
"mode": "cli",
"name": "inkscape"
}
]
},
"warnings": []
}inkscape est connecté, en mode cli, et son app_version est 1.4. Le Hub expose deux outils et pas un de plus : un client qui demande la liste des outils reçoit ["execute_script", "get_state"].
Envoyer le premier script
Un modèle envoie un script comme celui-ci par execute_script. Pour l’envoyer vous-même, enregistrez-le sous le nom first.py, enregistrez le client de la démonstration sous le nom client.py, puis lancez python3 client.py first.py.
import json
print("the script ran inside Inkscape's Python")
print("LMM_RESULT: " + json.dumps({"answer": 6 * 7}))La troisième réponse du client est la réponse du Hub au script :
{
"app": "inkscape",
"duration_ms": 30,
"error": null,
"result": {
"answer": 42
},
"status": "ok",
"stderr": "",
"stdout": "the script ran inside Inkscape's Python\n",
"truncated": false
}stdout est ce que le script a imprimé, result la valeur qui suit LMM_RESULT: , et status vaut ok. Le guide du modèle liste les autres statuts (error, refused, timeout, busy et unavailable) et ce qu’il faut faire de chacun : guide du modèle. Un script qui dessine, et l’image qu’il a produite, sont sur la page Démonstration.