Le contexte
Chaque conversation avec une IA repartait de zéro. Je devais réexpliquer qui je suis, mes projets, mes compétences, mon CV — un contexte dispersé, jamais à jour, et aucune IA n'a une mémoire durable que je contrôle. Je voulais que ma base de connaissances soit accessible par n'importe quelle IA (ChatGPT, Claude, Cursor, opencode), pas enfermée dans un seul outil.
Ce que j'ai construit
Un « second cerveau » auto-hébergé : un vault Obsidian comme source de vérité, versionné sur un repo GitHub privé, indexé par un pipeline n8n dans Qdrant (vector store), embarqué en local avec Ollama bge-m3, et généré avec DeepSeek V4 Flash Vision (via la passerelle OpenCode Go). Le tout est exposé à n'importe quelle IA via un serveur MCP dédié.
Deux outils MCP :
second_brain_ask
RAG sur toute ma base : n'importe quelle IA pose une question et reçoit une réponse sourcée (projets, stack, CV, leçons apprises).
second_brain_add
N'importe quelle IA peut écrire des notes. Chaque note est classée automatiquement (type, tags, dossier), vérifiée contre les doublons, et mise en quarantaine jusqu'à validation.
Ingestion (toutes les 30 min)
Repo privé → décodage → embeddings locaux → Qdrant. Les notes en attente (écrites par IA) sont exclues tant qu'elles ne sont pas validées.
Housekeeping (hebdomadaire)
Un rapport signale les paires de notes redondantes (similarité sémantique), écrit en quarantaine pour relecture.
Impact
Une base, toutes les IA
Une seule URL MCP (/mcp/second-brain-kb) permet à ChatGPT, Claude, Cursor ou opencode de LIRE et d'ÉCRIRE dans ma base, avec citations des sources.
Confidentialité par conception
Les embeddings tournent 100 % en local (Ollama) sur mon VPS — aucun tiers n'indexe mes notes. Zéro coût API supplémentaire.
Validation humaine
Rien de ce qu'une IA écrit n'entre dans la base interrogeable sans validation (status: pending) — un garde-fou contre l'injection de prompt.
Contrôles qualité
Écritures dupliquées refusées à ≥ 75 % de similarité, notes auto-classées, rapport de redondances hebdomadaire.
Ce que cette expérience m'a appris
Livrer un serveur MCP en production m'a apporté trois leçons dures : les nœuds de modèle OpenAI n'exposent pas les headers custom (la passerelle OpenCode Go exige x-opencode-session) → appeler l'API directement en HTTP ; splitInBatches s'arrête sur un item vide → préférer les pipelines linéaires ; et les écritures IA non contrôlées sont une vraie menace → le pattern de quarantaine par statut est le garde-fou le plus simple et le plus efficace.