Serveur MCP
POST /mcp parle le Model Context Protocol : Claude ou tout client MCP lit le schéma (JSON, Mermaid, Cypher, JSON Schema, GraphQL), exécute des requêtes de lecture, demande le plan d'une requête sans l'exécuter, et écrit. Il agit avec l'identité de son jeton ou de son compte, donc avec ses rôles et privilèges ; un outil qu'il n'a pas le droit d'utiliser n'est même pas listé. Les requêtes enregistrées (My APIs) sont aussi des outils.
Recherche vectorielle
CREATE VECTOR INDEX sur une propriété d'embedding, puis db.index.vector.queryNodes rend les k plus proches voisins, par similarité cosinus ou euclidienne. Recherche exacte jusqu'à 2 000 vecteurs, puis graphe HNSW approché (rappel mesuré d'au moins 0,9) qui suit les mises à jour.
Recherche texte brut
CREATE FULLTEXT INDEX sur plusieurs labels et propriétés, avec des analyseurs (standard, simple, english, keyword...) et des requêtes par termes, +obligatoire, -exclu, "expression exacte", prefixe*, flou~ et propriété:terme, classées par tf-idf.
Les deux recherches sont des requêtes comme les autres : elles se combinent avec le graphe dans une seule instruction. On trouve les passages les plus proches d'une question par le sens, puis on suit les relations jusqu'à leur source, leur auteur ou leur produit, et l'on donne ce contexte à l'assistant. C'est la base de la recherche augmentée (RAG) sur des données reliées.
Écrire sans rien casser
- À blanc : une écriture s'exécute dans une transaction annulée, et l'agent voit les changements qu'elle ferait.
- Direct ou par promotion : par défaut l'écriture est appliquée tout de suite, dans les droits de l'agent ; en mode « staged » elle devient une proposition, gardée dans une base répliquée, qu'un relecteur promeut ou rejette.
- Des droits à lui : donnez à l'agent un rôle limité aux bases et aux labels dont il a besoin, et non le rôle intégré d'écriture ; il n'atteint alors pas la base des propositions.
- Limites et trace : lignes rendues, taille de l'instruction et écritures par minute sont plafonnées ; les écritures figurent dans le journal d'audit (protocole mcp) et portent $_agent, $_at et $_source.
gDown AIM : la mémoire de votre assistant IA
gDown retient aussi un projet pour Claude Code ou tout client MCP : poussez ses fichiers Markdown et ses commits, et l'assistant interroge la mémoire par les outils memory_*, dans un budget de jetons, avec la source de chaque réponse.
- Un paquet par dépôt : les fichiers Markdown suivis par Git et les commits des derniers jours, poussés par un script Python sans dépendance (ou par curl) ; gDown en extrait des faits typés (règles, décisions, pièges, points de plan, propriétés, routes, limites) et remplace l'état précédent d'un seul coup.
- Recherche hybride : concepts, texte intégral et vecteurs ; les embeddings sont calculés par gDown lui-même, dans son propre processus (modèle intégré, par défaut) ou par votre Ollama ou API compatible OpenAI.
- Cinq outils : memory_ask (une question, un dépôt, un budget), memory_context (ce qui s'applique à une tâche), memory_about (un concept), memory_status et memory_note ; chaque réponse cite sa source (fichier et ligne, commit ou note).
- Un jeton d'API révocable, lié à un compte local limité à une base : l'assistant lit et ne peut qu'ajouter des notes (memory_note est sa seule écriture) ; DROP API TOKEN lui coupe l'accès aussitôt.
Sans embeddings (provider none, ou un Ollama qui ne répond pas), le push réussit et la recherche est lexicale jusqu'à ce que le retard soit plongé. Ollama (ollama pull bge-m3 ; sous Linux, il doit écouter sur l'interface Docker) est facultatif : le modèle intégré n'en a pas besoin.
RAG : génération augmentée par la recherche dans gDown
gDown fait de la génération augmentée par la recherche (RAG) : il retrouve les passages qui répondent à une question, par le sens et par les mots, avec le graphe qui les entoure, pour qu'un modèle de langage réponde à partir de vos données et les cite. gDown retrouve ; le modèle qui rédige la réponse est le vôtre.
Pour les assistants : gDown AIM
- Ingestion : les fichiers Markdown et les commits d'un dépôt deviennent des faits typés et des fragments de 1 000 caractères avec un recouvrement de 100.
- Recherche hybride : le graphe de concepts, le texte intégral et les vecteurs (préfiltrés par dépôt) sont combinés, puis classés et coupés à un budget de jetons.
- Chaque réponse cite sa source (fichier et ligne, commit ou note).
- Servi par les outils MCP memory_ask, memory_context, memory_about et memory_note ; c'est le modèle propre à l'assistant qui génère la réponse.
Pour vos applications
- Un index vectoriel sur n'importe quelle propriété : recherche exacte jusqu'à 2 000 vecteurs, puis un graphe HNSW avec un rappel mesuré d'au moins 0,9.
- Recherche préfiltrée (étiquettes, valeurs de propriétés) : les k résultats sont comptés après le filtre.
- La recherche vectorielle, les requêtes de graphe Cypher et le texte intégral sont dans la même base et la même requête : trouver les passages les plus proches, puis suivre les relations jusqu'à leur source.
Embeddings : intégrés ou externes
- Intégrés (par défaut, provider=onnx) : le modèle multilingual-e5-small, quantifié int8, 384 dimensions, tourne dans le processus de gDown avec ONNX Runtime. Les fichiers du modèle sont épinglés par SHA-256, téléchargés une fois ou lus depuis un dossier, et le modèle est déchargé quand il est inactif. Aucun texte ne quitte le serveur.
- Externes (provider=http) : Ollama (bge-m3 recommandé, 1 024 dimensions) ou une API compatible OpenAI. Le jeton d'API n'est envoyé qu'à cette API et jamais journalisé, et les hôtes que le fournisseur peut appeler sont limités à une liste autorisée (la boucle locale par défaut).
- Aucun (provider=none) : la recherche n'utilise que le graphe et le texte intégral.
- Changer de modèle : les fragments plongés par un autre modèle sont marqués périmés et replongés à la demande.
Qualité mesurée
gDown AIM a été évalué sur trois jeux de questions, contre l'espace de travail réel (32 dépôts), sans puis avec vecteurs (bge-m3 par Ollama). Le tableau donne le rappel, la part des faits attendus retrouvés, et la taille des réponses. Ce tableau n'inclut pas le modèle ONNX intégré.
Rappel et taille des réponses en jetons. Les vecteurs n'ont changé le rappel que sur le jeu 3 (+11,1 points) et ont raccourci les réponses des jeux 2 et 3.
Limites : les index vectoriels et texte brut sont en mémoire et reconstruits à l'ouverture de la base ; pas de flux du serveur vers le client, pas d'OAuth propre à MCP (jeton ou compte, comme les autres routes) ; mémoire : sans embeddings (provider none, ou un Ollama qui ne répond pas) la recherche est lexicale jusqu'à ce que le retard soit plongé. Aucun banc d'essai de la recherche vectorielle ni de MCP n'est publié : les chiffres de cette page ne les couvrent pas.