neo4j-graph-ops
Interroge et fait évoluer le graphe de connaissances Neo4j d'une stack locale (APOC/GDS) via le serveur MCP officiel neo4j/mcp : lit le schéma, formule des requêtes Cypher en LECTURE d'abord, propose
Files3
View on GitHubSKILL.mdcowork-plugins/tk-data-ops/skills/neo4j-graph-ops/SKILL.md
GitHubneo4j-graph-ops — Le graphe, en lecture d'abord
Le graphe est la mémoire relationnelle de la stack : entités (personnes, projets, articles, organisations, versions) et leurs liens. Une requête mal écrite en lecture coûte du temps ; une écriture mal écrite coûte des données. D'où l'ordre : schéma → lecture → proposition d'écriture → GO → écriture.
1. Brancher le serveur MCP (une fois par plugin)
Le serveur officiel neo4j/mcp expose quatre tools : get-schema, read-cypher, write-cypher,
list-gds-procedures. Il se configure dans le .mcp.json du plugin (fourni à la racine de
tk-knowledge) et lit ses paramètres uniquement dans l'environnement :
| Variable | Rôle | Valeur |
|---|---|---|
NEO4J_URI |
adresse bolt | bolt://127.0.0.1:7687 en local |
NEO4J_USERNAME / NEO4J_PASSWORD |
identifiants | jamais en clair dans un fichier versionné |
NEO4J_DATABASE |
base cible | neo4j par défaut |
NEO4J_READ_ONLY |
true désactive write-cypher |
true par défaut ; passer à false seulement pour une session d'écriture décidée |
Installation : pip install neo4j-mcp-server (module python -m neo4j_mcp_server, transport stdio).
Le dépôt contient aussi un binaire Go neo4j-mcp (cmd/neo4j-mcp) ; méthode d'installation du
binaire à vérifier selon la plateforme. Détails et exemples : references/mcp-neo4j.md.
Le mot de passe vit dans le gestionnaire d'identifiants du système ou une variable de session : on ne
le lit pas, on ne l'affiche pas, on ne le colle pas dans un .mcp.json.
2. Séquence de travail
- Schéma d'abord —
get-schemaavant toute requête. Les labels et types de relations réels priment sur ce qu'on croit savoir ; un graphe alimenté par plusieurs collecteurs dérive. - Lecture —
read-cypheravecLIMITexplicite (≤ 100 par défaut) et paramètres nommés ($titre,$id) plutôt que des valeurs concaténées dans la chaîne. - Compter avant de toucher — pour toute modification envisagée, exécuter d'abord le
MATCHcorrespondant avecRETURN count(*). Le chiffre est annoncé à l'utilisateur. - Proposer l'écriture — présenter la requête
write-cyphercomplète, le nombre de nœuds ou relations touchés, et la requête inverse (comment revenir en arrière). Attendre le GO. - Écrire —
MERGEplutôt queCREATE(idempotence), propriétés de provenance sur chaque élément écrit :source,collecte_le(ISO 8601),confiance. - Vérifier — relire ce qui vient d'être écrit ; rendre compte avec les compteurs.
Un DELETE ou DETACH DELETE n'est jamais proposé en première intention : on marque
(archive_le, remplace_par) — principe NO-DROP. Si la suppression est vraiment demandée, elle
passe par un export préalable des éléments concernés (references/cypher-patterns.md, §Archivage).
3. Patterns du domaine
Le modèle type est Personne → Projet → Version, avec articles et organisations en périphérie :
// Projets d'une personne, avec leurs versions
MATCH (p:Personne {nom: $nom})-[:AUTEUR_DE]->(o:Projet)
OPTIONAL MATCH (o)-[:PUBLIE_EN]->(a:Version)
RETURN o.nom, o.type, collect(a.type) AS versions
ORDER BY o.debut
LIMIT 100
Les noms de labels ci-dessus sont génériques : les vrais viennent de get-schema. Le fichier
references/cypher-patterns.md rassemble les requêtes récurrentes : projets d'une personne, co-auteurs,
chaîne projet → versions → organisation, orphelins, doublons probables par titre normalisé, provenance
d'un nœud, archivage.
4. GDS et APOC
list-gds-procedures donne ce qui est réellement installé. Les algorithmes GDS (PageRank, Louvain,
similarité de nœuds) demandent une projection de graphe en mémoire : la créer avec un nom daté,
la supprimer en fin de session (gds.graph.drop) — c'est une projection, pas une donnée. Sur un
poste partagé avec Ollama, une projection de tout le graphe peut saturer la RAM : projeter le
sous-graphe utile (labels et relations listés), jamais * par réflexe.
5. Quand le graphe ne suffit pas
- Question « sémantique » (« des projets qui ressemblent à … ») →
graphrag-hybrid. - Nom d'entité à résoudre contre une référence externe → skill de réconciliation d'entités.
- Le schéma montre des labels inattendus → les signaler, ne pas les « corriger » en silence.
Format de réponse
- Ce que dit le schéma (labels/relations utilisés).
- La requête exécutée et son résultat (tableau court).
- Si écriture proposée : requête, impact chiffré, requête inverse, « GO ? ».
Changelog
- 2026-09-07 — 0.1.0 : version initiale. MCP officiel
neo4j/mcp(4 tools,NEO4J_READ_ONLY), séquence schéma → lecture → GO → écriture, patterns personne → projets → versions, garde-fous GDS.