Vue d’ensemble des outils
Linkly AI expose neuf outils aux assistants IA via MCP (Model Context Protocol) ; la passerelle cloud (mcp.linkly.ai, et linkly mcp --remote) en ajoute deux réservés au cloud — library_search et library_link — soit onze au total à cet endroit. Le cœur en est un flux de travail progressif d’accès aux documents :
list_libraries (lister les bibliothèques de connaissances), explore (vue d’ensemble des collections de documents), find_paths (localiser des chemins de dossier par mot-clé pour alimenter le path_glob de search) — auxquels s’ajoutent list (énumérer un conteneur : les fichiers d’un dossier, une bibliothèque ou vos notes) et l’unique outil de notes : note_save (créer / modifier une note).
search
Rechercher des documents et trouver les résultats pertinents
outline
Consulter le sommaire du document pour comprendre sa structure
grep
Trouver des motifs de texte spécifiques par correspondance regex
read
Lire le contenu du document pour obtenir des informations détaillées
list_libraries
Lister les bibliothèques de connaissances et leurs nombres de documents
explore
Vue d’ensemble des thèmes et de la structure de la collection de documents
find_paths
Localiser des chemins de dossier par mot-clé pour alimenter le
path_glob de searchlist
Lister les entrées d’un conteneur — un dossier, une bibliothèque ou vos notes
note_save
Créer ou modifier une note, écrit (le seul outil d’écriture sur une connexion locale)
library_search
Rechercher dans le catalogue des bibliothèques cloud, y compris celles non encore liées — passerelle cloud uniquement
library_link
Lier une bibliothèque cloud pour la rendre interrogeable, ou délier celle que vous avez nommée (
action: "unlink") — passerelle cloud uniquement, écritlibrary_search et library_link n’existent que sur la passerelle cloud. L’outil qui y écrit est library_link : il ajoute une bibliothèque cloud à l’ensemble lié de votre compte ou, avec action: "unlink", retire celle que vous avez nommée. Tout le reste ci-dessous ne fait que lire.note_save — et, sur la passerelle cloud, de library_link —, tous ces outils sont en lecture seule : ils se contentent de lire vos documents, sans jamais rien y modifier. note_save n’écrit que dans le dossier des notes et il n’existe aucun outil de suppression : supprimer une note reste une action que vous seul pouvez faire depuis l’application.
Recherche (search)
Recherche dans vos documents locaux indexés et retourne la liste des résultats les plus pertinents.Paramètres
À propos du filtrage et du tri par date :
- Lorsque l’utilisateur fournit une fenêtre temporelle explicite (« le mois dernier », « en 2024 », « ces trois derniers mois »), utilisez
modified_after/modified_before. - Lorsque l’utilisateur dit seulement « récent », « le plus récent », « le plus ancien » sans plage fixe, utilisez
time_sort=newestouoldest. - Les deux peuvent se combiner : « le plus ancien en 2024 » donne
modified_after=2024-01-01+modified_before=2024-12-31+time_sort=oldest. - Pour une date relative (« le mois dernier »), lisez d’abord l’heure UTC actuelle depuis le champ
[meta] now=...à la fin de toute réponse d’outil, puis calculez la date — voir Métadonnées de réponse ci-dessous.
Champs retournés
Chaque résultat de recherche contient les informations suivantes :word_count n’est pas un nombre de caractères : l’écart avec char_count dépend du contenu (ponctuation, espaces, Markdown). char_count porte sur le texte extrait disponible à ce stade — tant que l’OCR ou la transcription n’est pas terminée, ou si l’extraction a été tronquée, il ne reflète qu’une partie du document. Les éditeurs ne comptent pas tous de la même façon les sauts de ligne, les caractères combinants et les emoji : avant de conclure à un contenu manquant, vérifiez que vous comparez le même texte avec la même méthode. char_count nécessite Linkly AI Desktop v0.14.1 ou ultérieur : les documents indexés par une version antérieure renvoient null jusqu’à leur réextraction ou la reconstruction de l’index (read le calcule toujours), et les documents des bibliothèques cloud ne le fournissent pas encore.Exemples d’utilisation
Sommaire (outline)
Obtient le sommaire structuré et les métadonnées d’un ou plusieurs documents, permettant de comprendre rapidement la structure du document et de localiser les sections ciblées.Paramètres
Quand utiliser le sommaire
La fonctionnalité de sommaire est optimale pour les PDF avec signets, les documents Markdown, DOCX, DOC, PowerPoint (PPTX), XLSX, CSV, EPUB et RTF. Elle est particulièrement efficace pour la lecture de documents volumineux et de livres. Pour les tableurs, le sommaire liste des tableaux plutôt que des titres : un classeur XLSX produit une entrée par feuille (avec son nombre de lignes et de colonnes, sa ligne d’en-tête et quelques lignes d’aperçu) et un CSV produit une seule entrée résumant le tableau. Le support du sommaire pour le texte brut et les PDF sans signets sera ajouté dans les itérations futures.
Exemples d’utilisation
Grep
Localise des lignes spécifiques au sein d’un seul document à l’aide d’un motif regex. Idéal pour les documents avechas_outline=false où le sommaire n’est pas disponible. Utilisez-le après search pour localiser les positions exactes de noms, dates, termes, identifiants ou tout motif, puis utilisez read avec offset pour voir le contexte complet. Fonctionne avec tous les types de documents (PDF, Markdown, DOCX, DOC, PPTX, XLSX, CSV, EPUB, RTF, TXT, HTML). Pour rechercher dans plusieurs documents, appelez grep une fois par document.
Paramètres
Quand utiliser Grep vs Sommaire
Exemples d’utilisation
Lecture (read)
Lit le contenu d’un document avec positionnement par numéro de ligne et pagination, adapté à la lecture de sections spécifiques de documents longs. L’outil Read a un comportement cohérent avec celui du SDK Claude AI, garantissant des résultats optimaux avec divers modèles Agentic AI.Paramètres
Lire des documents illustrés
Dans bien des documents — les notes Markdown et la documentation technique tout particulièrement — l’information décisive se trouve dans les illustrations.read résout les références d’images apparaissant dans la plage de lignes que vous êtes en train de lire vers les documents image correspondants déjà indexés, et les joint à la fin du résultat. image_text détermine ce qui est joint :
full est soumis à un budget : 2 000 caractères au maximum par image, 20 000 caractères au total pour l’appel. Les images dépassant ce budget retombent automatiquement sur abstract, accompagnées de la marche à suivre pour les lire individuellement.
Format du contenu
L’outilRead retourne le contenu avec des numéros de ligne pour faciliter le référencement et le positionnement :
Stratégie de pagination
Pour les documents longs, il est recommandé de lire par blocs :read pour lire précisément cet intervalle.
Exemples d’utilisation
Lister les bibliothèques (list_libraries)
Liste toutes les bibliothèques de connaissances configurées par l’utilisateur, avec leurs descriptions et leurs nombres de documents.Paramètres
Aucun paramètre requis.Cas d’utilisation
- Lorsque l’utilisateur demande « quelles bibliothèques ai-je ? »
- Avant d’utiliser le paramètre
librarydanssearch, pour vérifier le nom d’une bibliothèque
Rechercher des bibliothèques (library_search)
Passerelle cloud uniquement — disponible sur le serveur MCP
linkly-ai-cloud et via linkly mcp --remote. Les connexions locales et LAN n’ont pas cet outil.search. Pour voir ce qui est déjà interrogeable, utilisez list_libraries.
Paramètres
Réponse
Chaque entrée porte l’identifiant exactcloud://<owner>/<slug> à transmettre aux autres outils, ainsi que titre, description, propriétaire, catégorie, visibilité, nombres de documents / étoiles / liaisons, is_owner, is_linked (déjà interrogeable — inutile de lier à nouveau) et can_link (avec cannot_link_reason: invite_required pour une bibliothèque Showcase à laquelle vous n’avez pas été invité). Les bibliothèques Public et Showcase sont toujours listées ; les bibliothèques Private n’apparaissent qu’à leur propriétaire et aux lecteurs invités. Les résultats sont triés par dernière mise à jour, la plus récente en premier. L’outil ne lie, n’étoile et ne modifie rien.
Cas d’usage
- « Trouve une base de connaissances sur Rust et utilise-la » →
library_search(query="Rust")→ choisir un résultat →library_link→search(query=…, library="cloud://…") - « Quelles bibliothèques cloud est-ce que je possède ? » →
library_search(owner="<votre nom d'utilisateur>")
Lier une bibliothèque (library_link)
Passerelle cloud uniquement ; l’un des deux outils qui écrivent (l’autre est
note_save). Le même outil délie avec action: "unlink" — voir ci-dessous.list_libraries, et search / explore / list acceptent aussitôt son cloud://<owner>/<slug>. Mêmes règles que le bouton Lier du site web.
Paramètres
Règles
- Bibliothèques Public : toute personne connectée peut lier. Bibliothèques Showcase et Private : uniquement le propriétaire et les lecteurs invités (l’outil répond
invite_required, ou « not found » pour une bibliothèque privée que vous ne pouvez pas voir). - Lier deux fois la même bibliothèque est sans effet — l’outil répond
already_linkedsans consommer de Slot supplémentaire. - Chaque liaison consomme un Slot (Free : 1, Pro : 99). Quand le quota est plein, l’outil répond
slot_exhaustedavec le nombre actuel, la limite et un lien de mise à niveau. L’assistant ne choisit jamais lui-même la bibliothèque à délier : il liste vos bibliothèques liées, demande laquelle libérer, appellelibrary_linkavecaction: "unlink", puis relie. Vous pouvez aussi libérer un Slot sur le site web.
Délier (action: "unlink")
Retire une bibliothèque cloud de l’ensemble lié de votre compte : elle disparaît de list_libraries, n’est plus interrogeable via MCP (pour tous les clients de votre compte) et son Slot est libéré. Rien d’autre ne change — votre accès de lecteur, l’invitation et l’étoile restent, la bibliothèque peut donc être reliée plus tard. Même paramètre library, exactement tel que listé par list_libraries.
- L’assistant ne délie qu’une bibliothèque que vous avez nommée — typiquement « remplace A par B » quand le Slot est plein. Si vous n’en avez nommé aucune, il liste vos bibliothèques liées et demande ; il n’en choisit jamais une lui-même.
- Délier une bibliothèque qui n’est pas liée est sans effet — l’outil répond
already_unlinked.not_foundsignifie qu’aucune bibliothèque de ce nom n’est visible pour votre compte. - La réponse indique les Slots encore utilisés, pour que l’assistant puisse lier dans la foulée la bibliothèque que vous vouliez vraiment.
Explorer (explore)
Obtient une vue d’ensemble de tous les documents indexés ou d’une bibliothèque spécifique. Retourne la distribution des types de documents, la structure des répertoires (avec le nombre de fichiers et la médiane du nombre de mots) et les mots-clés principaux (avec attribution de la source).Paramètres
Cas d’utilisation
- L’utilisateur souhaite savoir ce que contient sa base de connaissances ou sa collection de documents
- L’utilisateur n’a pas de sujet de recherche spécifique et souhaite découvrir les thèmes et directions disponibles
- L’assistant IA a besoin de comprendre l’échelle et la distribution thématique pour formuler des stratégies de recherche efficaces
search ultérieures.
Localisation de chemins (find_paths)
Effectue une correspondance approximative des mots-clés sur le champ chemin de fichier des documents indexés, agrège les correspondances au niveau du dossier et retourne les meilleurs candidats. Cet outil est positionné comme un complément desearch : lorsque l’utilisateur nomme un conteneur (« dans mes notes Notion », « dans mon dossier de papiers Dropbox ») sans en connaître le chemin sur le disque, appelez d’abord find_paths pour découvrir le chemin réel, puis transmettez-le comme path_glob à search.
Le nom réel du dossier sur le disque diffère souvent du nom utilisé par l’utilisateur (par exemple, un export peut résider sous Notion-Export-c58e430f... plutôt que simplement Notion), donc deviner directement un path_glob est fragile.
Paramètres
Champs retournés (mode JSON)
Comportement d’agrégation
- Les fichiers dont les motifs ne correspondent qu’au segment du nom de fichier (sans correspondance dans un segment de répertoire) sont silencieusement écartés — c’est un outil de « recherche de dossiers », pas de « recherche de fichiers ». Si une requête ne renvoie aucun dossier candidat alors que des fichiers correspondants existent, repassez à un appel direct à
search. - Chaque correspondance est regroupée par la position la moins profonde d’un motif dans le chemin, tronquée au prochain
/. Ainsilocal:///Users/me/Documents/Notion-Export-abc/workspace/page.mdcorrespondant àNotionest agrégé sous.../Documents/Notion-Export-abc, peu importe la profondeur du fichier.
Quand l’utiliser
- L’utilisateur nomme un conteneur avec un mot flou ou multilingue (« dans mes notes Notion », « dans mon dossier de papiers Dropbox », « dans ma sauvegarde de travail ») et vous ne connaissez pas le chemin réel
- Avant
search, pour déterminer la valeur depath_glob
Quand ne pas l’utiliser
- Requêtes purement basées sur le contenu / le sujet (« trouve mes CV », « trouve les articles IA ») — appelez
searchdirectement ; sa recherche hybride couvre déjà titre, nom de fichier, contenu et chemin - Filtrage par type de fichier uniquement (« tous les PDF ») — appelez
searchavecpath_glob="*.pdf"directement - Requêtes vagues sans intention de conteneur (« trouve les choses récentes ») — appelez
search
Exemple d’utilisation
Lister (list)
Liste les entrées d’un conteneur, sans aucune correspondance plein texte — pour retrouver du contenu par mot-clé ou par le sens, utilisezsearch. Trois conteneurs sont pris en charge : folder (les fichiers indexés sous un répertoire du disque), library (les fichiers d’une bibliothèque) et notes (les fiches de notes locales).
Répartition des rôles : explore = vue d’ensemble → find_paths = trouver un répertoire → list = lister les fichiers d’un conteneur connu → outline / read = lire le contenu. Le listage est un balayage récursif à plat de tout le sous-arbre — aucune arborescence n’est renvoyée ; pour descendre, suivez les chemins absolus des entrées ou passez par find_paths.
Paramètres
Champs retournés
Les entréesfolder / library comportent : doc_id, title, le path absolu, doc_type, word_count, char_count, total_lines, has_outline, modified_at (millisecondes Unix ; le mtime du système de fichiers), keywords, snippet (null sauf si les extraits sont activés) et skip_reason — un skip_reason non nul signifie que le contenu est illisible : ne lui appliquez ni read ni grep. Servez-vous de total_lines + has_outline pour arbitrer entre outline et read. Pour les scopes locaux, total compte l’ensemble filtré complet ; une bibliothèque cloud peut renvoyer total: null quand le décompte complet est inconnu — dans tous les cas, paginez avec offset + has_more.
Les entrées notes comportent : doc_id (transmissible à read / grep / outline), note_id et la version du moment (ces deux-là servent de jeton de verrou optimiste lors d’une modification via note_save), title, le chemin absolu, created_at / modified_at (millisecondes Unix), tags, les informations de source, ainsi que le snippet joint par défaut. La réponse comporte en outre un champ available_tags : les 50 tags les plus fréquents parmi l’ensemble des notes, directement réutilisables pour filtrer l’appel suivant via tags.
Pointeur README : uniquement lorsque vous listez avec un
path explicite (scope folder ou library locale) et qu’un fichier de type README se trouve directement dans ce répertoire (pas dans un sous-répertoire), la réponse porte un pointeur readme de premier niveau. Les bibliothèques cloud n’en renvoient jamais. S’il est présent et que vous devez comprendre à quoi sert le dossier, lisez d’abord ce document.Le système de fichiers d’abord (notes) : une note tout juste écrite apparaît immédiatement dans la liste, mais son
doc_id vaut alors null et indexed vaut false (le nombre de mots et de lignes restent vides également) ; tout cela se complète une fois l’indexation passée. « Une note tout juste écrite figure dans la liste mais reste introuvable à la recherche » est donc un comportement normal, elle n’est pas perdue.title peut lui aussi valoir null : les notes dont le nom de fichier est généré automatiquement n’ont pas de titre exploitable ; il faut alors s’appuyer sur l’extrait, les tags et la date.Bibliothèques cloud
folder ne comprend que les chemins de disque locaux. Pour lister une bibliothèque cloud, utilisez scope="library" avec library="cloud://<owner>/<slug>" (disponible avec --remote) et passez dans path un préfixe de répertoire relatif — exactement la forme que renvoie le find_paths cloud. Le préfixe s’applique à l’union de toutes les sources de la bibliothèque ; un préfixe inexistant est indiscernable d’un répertoire vide — sur la première page (offset=0), les deux renvoient total: 0, avec une indication si un path a été fourni.
Le listage cloud diffère du local sur quelques points : sort="name" n’est pas pris en charge, skip_reason vaut toujours null, les extraits sont tronqués à environ 120 caractères et, au-delà de la première page, total peut valoir null — paginez avec has_more.
Exemples d’utilisation
Enregistrer une note (note_save)
Crée ou modifie une fiche de note Markdown locale. Aveclibrary_link (passerelle cloud uniquement), c’est l’un des deux seuls outils qui écrivent, et il n’écrit que dans le dossier des notes ; les métadonnées YAML sont intégralement générées côté serveur, l’appelant n’a pas à s’en préoccuper.
Paramètres
Deux règles à connaître impérativement
Le format du corps obéit à une liste blanche, on n'y écrit pas n'importe quoi
Le format du corps obéit à une liste blanche, on n'y écrit pas n'importe quoi
Cette voie n’accepte que la part de Markdown que la barre d’outils de l’interface sait produire : paragraphes et sauts de ligne, gras, barré, listes ordonnées ou à puces, texte brut.Les titres, l’italique, les citations, le code, les liens, les tableaux, les listes de tâches, les images et le HTML brut sont rejetés, avec un
NOTE_INVALID_INPUT en retour. Ce que vous écrivez vous-même dans l’interface n’est pas soumis à cette restriction.Les #tag présents dans le corps (hors code) sont les tags de la note : le corps est l’unique source de vérité, exactement comme lorsque vous écrivez dans l’éditeur de l’application. Pour retirer un tag, effacez son #tag ; le paramètre tags ne sait qu’ajouter. Les notes écrites par les versions antérieures, dont les tags ne figurent que dans le YAML, se réparent d’elles-mêmes : à la première modification par l’IA, les #tag manquants sont ajoutés au corps.La modification impose une boucle de verrou optimiste (CAS)
La modification impose une boucle de verrou optimiste (CAS)
La bonne séquence est la suivante :
list(scope="notes") pour obtenirnote_idetversionread(doc_id)pour lire le corps intégral actuelnote_saveavecmode="edit",note_id,base_version(la version qui vient d’être lue) et le corps complet révisé — gardez les#tagque vous voulez conserver, effacez ceux dont vous voulez vous débarrasser
base_version est périmé (la note a été modifiée entre-temps), un NOTE_VERSION_CONFLICT est retourné, accompagné du numéro de version réel — il faut alors relire, fusionner et réessayer, surtout pas écraser aveuglément.Chaque réponse en succès retourne le content effectif de la note (le serveur y a peut-être ajouté des #tag) ainsi que sa nouvelle version — toute modification ultérieure doit partir du content retourné, jamais de celui que vous avez envoyé. Une note pas encore indexée a un doc_id à null : c’est précisément ainsi que l’on modifie une note que l’on vient de créer. Ne réécrivez jamais une note entière sur la seule foi de son extrait.Métadonnées de réponse
Chaque réponse réussie d’outil contient l’heure UTC actuelle, ce qui permet aux appelants de calculer des dates relatives (« le mois dernier », « cette année », « ces 30 derniers jours ») sans dépendre de la date de coupure d’entraînement du modèle.-
Sortie Markdown : un bloc de pied de page à la fin de la réponse, formaté comme :
-
Sortie JSON : un objet
_metaau niveau supérieur :
isError: true) n’incluent pas ces métadonnées — le corps d’erreur transmet déjà la cause, et ajouter un horodatage diluerait le signal.
Lorsque l’utilisateur utilise une date relative, lisez now depuis la réponse d’outil la plus récente, calculez la date ISO 8601 correspondante, puis transmettez-la à modified_after / modified_before de search.
Exemples de flux de travail
Flux de travail complet : via CLI
L’exemple suivant illustre comment effectuer une recherche documentaire complète via le CLI :Flux de travail complet : via MCP
Lorsque l’assistant IA appelle les outils via le protocole MCP, le format des requêtes est le suivant :Questions fréquentes
Quels formats de documents sont pris en charge ?
Quels formats de documents sont pris en charge ?
Linkly AI prend actuellement en charge les formats suivants :
Les fichiers Excel et CSV sont convertis en tableaux Markdown de style GitHub et indexés au niveau du texte de chaque cellule :
search et grep retrouvent donc les mots contenus dans une cellule. Le sommaire diffère selon le format : un classeur .xlsx produit une entrée par feuille de calcul (avec son nombre de lignes et de colonnes, sa ligne d’en-tête et quelques lignes d’aperçu), tandis qu’un .csv produit une seule entrée résumant le tableau. Seuls .xlsx et .csv sont pris en charge : l’ancien .xls ainsi que les variantes .xlsm, .xlsb et .ods ne le sont pas. Un CSV qui n’est pas en UTF-8 n’est décodé que si son encodage peut être déterminé à partir du fichier lui-même ou de ses voisins dans le même répertoire ; si l’encodage reste indéterminable, le fichier est ignoré plutôt qu’indexé sous forme de caractères illisibles. Ces deux formats sont limités à 16 Mio par fichier.La transcription vocale de l’audio et de la vidéo est désactivée par défaut : ces fichiers sont bien enregistrés dans l’index et se retrouvent par leur nom, mais pour chercher « ce qui s’y dit », il faut d’abord activer Transcription audio et Transcription vidéo dans « Améliorations de l’extraction », dans la zone « Gestion » de la page « Gestion de l’index » de la fenêtre principale. Voir Paramètres d’indexation.Que faire si le sommaire n'est pas disponible ?
Que faire si le sommaire n'est pas disponible ?
Si le document n’a pas de sommaire disponible (
has_outline: false), vous pouvez :- Utiliser directement l’outil
readpour parcourir le contenu du document page par page - Lire d’abord le début du document (200 lignes par défaut) pour avoir un aperçu du contenu, puis décider si vous souhaitez poursuivre la lecture
Comment traiter les documents longs ?
Comment traiter les documents longs ?
Quel est le port par défaut du service MCP ?
Quel est le port par défaut du service MCP ?
Le port par défaut est 60606. Si ce port est occupé, l’application essaie automatiquement d’autres ports. Pour connaître l’adresse et le port réellement utilisés, ouvrez la page « Utilisation par les agents » de la fenêtre principale de Linkly AI Desktop et cliquez sur « Voir la configuration de connexion MCP ».
Que faire si les résultats de recherche sont imprécis ?
Que faire si les résultats de recherche sont imprécis ?
Vous pouvez essayer :
- Utiliser des mots-clés plus précis
- Utiliser des descriptions en langage naturel (en exploitant la correspondance sémantique vectorielle)
- Combiner mots-clés et synonymes, par exemple
"authentication auth login sign-in" - Utiliser
--typepour filtrer des types de documents spécifiques et affiner le champ de recherche


outline(si un sommaire est disponible)offsetetlimitdereadpour lire précisément les sections cibléesoffsetpour paginer