Serveur MCP (agents IA)

LightNote inclut un serveur MCP (Model Context Protocol) headless qui transforme votre espace de travail en un outil pour agents IA (Claude Desktop, Claude Code, Cursor, et tout client parlant MCP). L'agent peut lire et écrire des fichiers, rechercher, interroger des données tabulaires et des bases de données, travailler avec les tâches, utiliser Git et lancer des requêtes HTTP — le tout confiné au dossier (directory jail : les chemins avec .. ou hors de la racine sont refusés). Le transport est JSON-RPC 2.0 sur stdin/stdout ; chaque session lance un processus lnote.exe léger, séparé de la fenêtre de l'éditeur.

Raccourci en un clic : via IA → Activer l'IA dans ce dossier, LightNote active le MCP et écrit le .mcp.json d'un coup (le clic vaut consentement). Si l'IA est déjà active dans le dossier, l'élément devient Configurer l'IA de ce dossier… et ouvre la Configuration de l'espace de travail.

Sécurité à deux niveaux : (1) le serveur ne démarre que si vous avez donné l'opt-in pour ce dossier ; (2) chaque outil est verrouillé à la racine de l'espace. En plus, chaque outil est annoncé avec des annotations (lecture seule, destructif, idempotent, « touche le monde extérieur ») pour que le client IA évalue le risque avant de l'appeler.

Configuration pas à pas

  1. Activez le MCP pour le dossier. Dans Outils → Espace de travail → Configuration de l'espace de travail..., cochez Activer le MCP pour cet espace. Sans cet opt-in, le serveur refuse de démarrer (c'est le verrou principal). Sinon, en ligne de commande : lnote --mcp-enable "C:\Chemin\vers\espace-de-travail" (et --mcp-disable pour le désactiver).
  2. Trouvez le chemin de lnote.exe. Il se trouve dans le même dossier que lightnote.exe (le dossier d'installation de l'application). C'est l'exécutable console « slim », sans interface — c'est ce que l'agent lance.
  3. Enregistrez le serveur dans votre client IA, en pointant la commande vers lnote.exe et en passant --mcp suivi du dossier de l'espace. Au format utilisé par Claude Desktop / Cursor et similaires :
{
  "mcpServers": {
    "lightnote": {
      "command": "C:\\Chemin\\vers\\lnote.exe",
      "args": ["--mcp", "C:\\Chemin\\vers\\espace-de-travail"]
    }
  }
}

Conseils de configuration :

  • Les barres obliques inverses en JSON doivent être doublées (C:\\Users\\...\\lnote.exe), comme dans l'exemple.
  • Pour exposer plusieurs espaces de travail, ajoutez une entrée par dossier, avec des noms distincts ("lightnote-projetA", "lightnote-projetB"), chacune pointant vers sa racine.
  • Après avoir enregistré la configuration, redémarrez le client IA pour qu'il lance le serveur. Une fois connecté, l'agent devrait lister les outils lightnote_* ; demandez-lui « liste les fichiers de l'espace » pour confirmer que ça marche.
  • Pour Claude Code (CLI), le même serveur s'enregistre avec claude mcp add lightnote -- "C:\Chemin\vers\lnote.exe" --mcp "C:\Chemin\vers\espace-de-travail".

Mot de passe de base de données (facultatif). L'outil db_query ouvre une connexion .lnc. Si le mot de passe est chiffré avec la Phrase-Sécurisée, passez la phrase via la variable d'environnement LNOTE_PASSPHRASE dans le bloc du serveur (jamais en arguments de ligne de commande) — les connexions dont le mot de passe est en mode « demander » ne peuvent pas être utilisées sans surveillance.

LightNote ouvert, la base passe par la fenêtre. Une CLI d'IA lancée dans le terminal de l'application (Claude Code, par exemple) interroge via la session que vous avez déjà ouverte : cela vaut pour toute base, y compris Oracle, avec le mot de passe déjà saisi et le tunnel SSH actif. Si la connexion est fermée, le mot de passe est demandé dans la fenêtre — refuser là, c'est refuser l'IA —, et la barre d'état signale quand un outil d'IA lance une requête. Pour écrire une requête sur une grande base, l'IA trouve les tables par leur nom avec db_search_objects (dans tous les schémas), lit la liste avec le commentaire et le nombre de lignes estimé (db_list_objects) et décrit plusieurs tables à la fois, avec les clés étrangères qui donnent les JOIN (db_describe). Application fermée, ce qui précède s'applique.

Les requêtes de l'IA sont facultatives par connexion. Activer MCP dans le dossier n'expose pas les connexions : chaque .lnc ne répond à db_query que si l'option « Autoriser les requêtes de l'IA (MCP) » est cochée dans la boîte de dialogue de la connexion. L'accès est en lecture seule (SELECT). L'autorisation est conservée dans les réglages du dossier, sur cette machine : elle n'est pas enregistrée dans le fichier .lnc ni transmise par Git, et l'IA ne peut pas l'activer en modifiant le fichier. Changer le serveur, la base, l'utilisateur ou le tunnel de la connexion la suspend jusqu'à ce que vous cochiez de nouveau l'option. Une base dans un fichier (SQLite, DuckDB) doit se trouver dans l'espace de travail, et via DuckDB l'IA ne lit que les fichiers de l'espace de travail — aucun lorsque LightNote est ouvert.

Exporter depuis la base de données via l'agent. Outre les requêtes, l'agent peut matérialiser un SELECT dans un fichier avec db_export (Parquet, CSV, JSON ou .xlsx) — utile pour des résultats trop volumineux pour tenir dans une réponse. Les trois mêmes précautions s'appliquent, dans cet ordre : la requête doit être en lecture seule, la connexion exige l'option « Autoriser les requêtes IA (MCP) » (vérifiée avant le déchiffrement du mot de passe), et la destination doit rester dans l'espace de travail. Les gros exports utilisent le dossier temporaire du système comme espace de travail, environ la taille du résultat — gardez de l'espace disque libre.

Outils disponibles

L'agent voit les outils sous le préfixe du client (p. ex. lightnote_read_file). Par catégorie :

  • Fichiers : read_file (avec plage de lignes facultative), write_file, edit_file (remplace un extrait exact, sans réécrire tout le fichier), append_file, list_files, move_file, make_dir et delete_file (va dans la Corbeille, pas de suppression définitive).
  • Recherche et navigation : search_files (ripgrep, avec filtre sous-dossier/glob et limite), list_symbols (plan des fonctions/classes d'un fichier) et open_in_editor (ouvre/met au premier plan un fichier dans la fenêtre de LightNote, si elle est ouverte).
  • Données et SQL : query (SQL DuckDB sur Parquet/CSV/JSON, sortie tsv/json/markdown), describe_table (schéma + statistiques, sans déverser de lignes), export_query (matérialise un SELECT dans un fichier via COPY), sqlite_query (SQL sur un .sqlite/.db), db_list_connections (liste les .lnc de l'espace) et db_query (SQL en lecture seule sur une connexion .lnc). Pour envoyer le résultat vers un fichier plutôt que dans la réponse : db_export (Parquet/CSV/JSON/.xlsx).
  • Aussi : search_notes (récupère les extraits de notes les plus pertinents pour une question — le même moteur que Interroger vos notes), list_links (les liens sortants d'une note, résolus ou cassés), audit_vault_links (liens cassés et notes orphelines de tout le coffre), list_note_templates et le paramètre template de create_note, list_due_tasks (tâches dues aujourd'hui ou en retard dans tous les projets), xlsx_read (lit une feuille .xlsx en TSV), data_diff (compare deux fichiers tabulaires) et le catalogue de base de données db_list_objects/db_describe (tables/vues et les colonnes, clés et DDL d'une table — mêmes exigences que db_query). Et note_export (exporte une note en docx, odt, epub, LaTeX, Typst, HTML, reStructuredText, AsciiDoc, Org, MediaWiki, Notebook ou dans un autre dialecte Markdown — sans aucune fenêtre, et aussi depuis lnote note-export). Et note_import (le chemin inverse : un docx, odt, epub, rtf, HTML ou tex devient une note à côté de l’original, avec titres, listes, tableaux, emphase, liens, formules et images — aussi depuis lnote note-import). Et folder_export (un dossier entier devient un site HTML, un ensemble de documents ou du Markdown, avec les liens réécrits — aussi depuis lnote folder-export).
  • Archives : zip_list (liste les membres d'un .zip/.isx) et zip_read (lit un membre comme texte) — sans extraire l'archive sur le disque.
  • Tâches : list_task_projects (liste les projets de tâches .lnt de l'espace), list_tasks, list_task_statuses (colonnes du tableau), create_task, update_task (titre, effort, colonne, priorité, dates, %, étiquettes, liste de contrôle et archivage), update_task_status (changer de colonne), delete_task et task_note (lire/écrire la note .md de la tâche). Un espace peut contenir plusieurs projets .lnt : choisissez lequel avec le paramètre project (le name renvoyé par list_task_projects ; facultatif s'il n'y en a qu'un). Les id/status_id sont des identifiants de session — ne lisez pas les fichiers internes du .lnt pour les obtenir ; utilisez les outils de tâches.
  • Notes (PKM) : create_note (crée une note .md), append_daily_note (ajoute une capture à la note du jour), remember (enregistre un fait durable vous concernant dans la note de mémoire), list_backlinks (notes pointant vers une note), list_note_tags et search_by_tag (les #hashtags du vault et les notes qui les utilisent) et add_task (crée une tâche avec échéance/étiquettes, en acceptant le langage naturel dans le titre).
  • Git : git_status, git_log, git_diff et git_restore.
  • Web et alertes : http_request (lance une requête HTTP et renvoie statut/en-têtes/corps) et notify (affiche une notification dans la barre d'état système de la fenêtre ouverte — pratique pour que l'agent signale qu'il a terminé).
  • Proxy d'IA : list_ai_models et ask_ai (ci-dessous).
  • LightNote lui-même : help_lookup (lit cette aide par section ou par terme, dans la langue demandée) et markdown_reference (la syntaxe exacte du Markdown que l'application affiche). À la connexion, le client reçoit aussi une description du serveur avec les outils par catégorie, et l'aide et la référence du Markdown apparaissent comme ressources (lightnote://help/… et lightnote://markdown/…).

Le serveur expose aussi les fichiers de l'espace comme ressources MCP (resources/list et resources/read), pour les clients qui préfèrent « joindre » des fichiers plutôt qu'appeler read_file.

Votre Bibliothèque de prompts (le dossier Prompts/ de l'espace) est exposée en tant que prompts MCP (prompts/list et prompts/get). Dans Claude Code, chaque prompt devient une commande slash — /mcp__lightnote__<nom> — prête à l'emploi dans la CLI d'IA.

Filet de sécurité des écritures. Avant d'écraser (write_file/edit_file) ou de supprimer (delete_file) un fichier, le serveur enregistre la version précédente dans l'Historique local — le filet de sécurité de l'éditeur — afin que vous puissiez annuler une modification faite par un agent, même hors d'un dépôt Git.

Chaque outil indique s'il lit ou écrit : outre les annotations MCP (readOnlyHint/destructiveHint), la description commence par une étiquette [read-only], [writes] ou [destructive] — pratique pour bâtir des listes d'autorisation en toute sécurité.

Proxy d'IA (déléguer à un autre modèle)

Les fournisseurs d'API que vous avez enregistrés avec la colonne MCP cochée sont exposés à l'agent via deux outils : list_ai_models (liste les modèles autorisés, avec id, nom et modèle) et ask_ai ({model, prompt}). Ainsi l'agent principal peut déléguer une sous-tâche à un modèle moins cher ou spécialisé. L'appel est relayé par le LightNote ouvert (le lnote.exe du MCP transmet la demande à la fenêtre de l'application par le pont interne) : la clé d'API ne quitte jamais votre machine et n'atteint jamais l'agent. Si LightNote n'est pas ouvert, l'outil renvoie une erreur vous demandant de l'ouvrir.

Index

Édition

Outils

Automatisation (IA / scripts)

Référence