fix: unify theme system - fix theme switching persistence
- Unified localStorage key to 'theme-preference' across all components
- Fixed header.tsx using wrong localStorage key ('theme' instead of 'theme-preference')
- Added localStorage hybrid persistence for instant theme changes
- Removed router.refresh() which was causing stale data revert
- Replaced Blue theme with Sepia
- Consolidated auth() calls to prevent race conditions
- Updated UserSettingsData types to include all themes
This commit is contained in:
363
mcp-server/START-SSE.md
Normal file
363
mcp-server/START-SSE.md
Normal file
@@ -0,0 +1,363 @@
|
||||
# Guide de Démarrage - Serveur MCP Keep Notes (Mode SSE)
|
||||
|
||||
## 🚀 Démarrage Rapide du Serveur SSE
|
||||
|
||||
### Option 1: Script PowerShell (Recommandée pour Windows)
|
||||
|
||||
```powershell
|
||||
# Exécuter depuis le dossier mcp-server
|
||||
.\start-sse.ps1
|
||||
```
|
||||
|
||||
**Ce script fait:**
|
||||
- ✅ Vérifie que Prisma est généré
|
||||
- ✅ Vérifie que Keep Notes est en cours d'exécution (port 3000)
|
||||
- ✅ Génère Prisma si nécessaire
|
||||
- ✅ Messages d'erreur clairs
|
||||
- ✅ Démarre le serveur MCP sur le port 3001
|
||||
|
||||
### Option 2: Commande directe
|
||||
|
||||
```bash
|
||||
cd mcp-server
|
||||
npm run start:sse
|
||||
```
|
||||
|
||||
Ou directement:
|
||||
|
||||
```bash
|
||||
node index-sse.js
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Prérequis
|
||||
|
||||
### 1. Node.js installé
|
||||
|
||||
```bash
|
||||
node --version
|
||||
# Doit retourner v18 ou supérieur
|
||||
```
|
||||
|
||||
### 2. Dépendances installées
|
||||
|
||||
```bash
|
||||
cd mcp-server
|
||||
npm install
|
||||
```
|
||||
|
||||
### 3. Client Prisma généré
|
||||
|
||||
```bash
|
||||
npx prisma generate
|
||||
```
|
||||
|
||||
### 4. Keep Notes en cours d'exécution
|
||||
|
||||
Le serveur SSE nécessite que Keep Notes soit démarré sur le port 3000.
|
||||
|
||||
```bash
|
||||
# Dans un autre terminal
|
||||
cd keep-notes
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 5. Port 3001 disponible
|
||||
|
||||
Le serveur SSE utilise le port 3001. Vérifiez qu'il n'est pas déjà utilisé:
|
||||
|
||||
```bash
|
||||
# Windows (PowerShell)
|
||||
netstat -ano | findstr "3001"
|
||||
|
||||
# Mac/Linux
|
||||
lsof -i :3001
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Utilisation avec N8N
|
||||
|
||||
### Configuration N8N pour MCP SSE
|
||||
|
||||
Le serveur SSE est parfait pour N8N sur une machine distante!
|
||||
|
||||
#### Étape 1: Trouver votre IP
|
||||
|
||||
**Windows:**
|
||||
```powershell
|
||||
ipconfig
|
||||
```
|
||||
Cherchez "IPv4 Address" (ex: 192.168.1.100)
|
||||
|
||||
**Mac/Linux:**
|
||||
```bash
|
||||
ifconfig
|
||||
# ou
|
||||
ip addr show
|
||||
```
|
||||
|
||||
#### Étape 2: Configurer N8N
|
||||
|
||||
Dans N8N, allez dans **Settings** → **MCP Access** et ajoutez:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "keep-notes",
|
||||
"transport": "sse",
|
||||
"url": "http://192.168.1.100:3001/sse"
|
||||
}
|
||||
```
|
||||
|
||||
Remplacez `192.168.1.100` par votre IP réelle.
|
||||
|
||||
#### Étape 3: Activer les workflows
|
||||
|
||||
1. Importez les workflows N8N (voir `N8N-SETUP.md`)
|
||||
2. Activez chaque workflow (bouton play)
|
||||
3. Les workflows peuvent maintenant appeler les outils MCP
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Outils Disponibles (19 au total)
|
||||
|
||||
### Notes (9 outils)
|
||||
|
||||
| # | Outil | Description |
|
||||
|---|--------|-------------|
|
||||
| 1 | create_note | Créer une nouvelle note (support complet) |
|
||||
| 2 | get_notes | Récupérer toutes les notes (supporte filtres) |
|
||||
| 3 | get_note | Récupérer une note par ID |
|
||||
| 4 | update_note | Mettre à jour une note |
|
||||
| 5 | delete_note | Supprimer une note |
|
||||
| 6 | search_notes | Rechercher des notes |
|
||||
| 7 | get_labels | Récupérer les labels (méthode legacy) |
|
||||
| 8 | toggle_pin | Épingler/désépingler une note |
|
||||
| 9 | toggle_archive | Archiver/désarchiver une note |
|
||||
|
||||
### Notebooks (5 outils)
|
||||
|
||||
| # | Outil | Description |
|
||||
|---|--------|-------------|
|
||||
| 10 | create_notebook | Créer un nouveau notebook |
|
||||
| 11 | get_notebooks | Récupérer tous les notebooks |
|
||||
| 12 | get_notebook | Récupérer un notebook avec ses notes |
|
||||
| 13 | update_notebook | Mettre à jour un notebook |
|
||||
| 14 | delete_notebook | Supprimer un notebook |
|
||||
|
||||
### Labels (5 outils)
|
||||
|
||||
| # | Outil | Description |
|
||||
|---|--------|-------------|
|
||||
| 15 | create_label | Créer un nouveau label |
|
||||
| 16 | get_labels_detailed | Récupérer les labels avec détails |
|
||||
| 17 | update_label | Mettre à jour un label |
|
||||
| 18 | delete_label | Supprimer un label |
|
||||
|
||||
---
|
||||
|
||||
## 📊 Tests de Vérification
|
||||
|
||||
### Test 1: Health Check
|
||||
|
||||
```bash
|
||||
curl http://localhost:3001/
|
||||
```
|
||||
|
||||
**Réponse attendue:**
|
||||
```json
|
||||
{
|
||||
"name": "Keep Notes MCP SSE Server",
|
||||
"version": "2.0.0",
|
||||
"status": "running",
|
||||
"endpoints": {
|
||||
"sse": "/sse",
|
||||
"message": "/message"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Test 2: SSE Connection
|
||||
|
||||
```bash
|
||||
curl -N http://localhost:3001/sse
|
||||
```
|
||||
|
||||
### Test 3: Appeler un outil (get_notes)
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:3001/message \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "tools/call",
|
||||
"params": {
|
||||
"name": "get_notes",
|
||||
"arguments": {}
|
||||
},
|
||||
"id": 1
|
||||
}'
|
||||
```
|
||||
|
||||
### Test 4: Créer une note
|
||||
|
||||
```powershell
|
||||
$body = @{
|
||||
jsonrpc = "2.0"
|
||||
method = "tools/call"
|
||||
params = @{
|
||||
name = "create_note"
|
||||
arguments = @{
|
||||
content = "Test depuis MCP SSE"
|
||||
title = "SSE Test"
|
||||
color = "green"
|
||||
}
|
||||
}
|
||||
id = 1
|
||||
} | ConvertTo-Json -Depth 5
|
||||
|
||||
Invoke-RestMethod -Method POST -Uri "http://localhost:3001/message" `
|
||||
-Body $body -ContentType "application/json"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Configuration Avancée
|
||||
|
||||
### Changer le port
|
||||
|
||||
Modifier `index-sse.js`:
|
||||
|
||||
```javascript
|
||||
const PORT = process.env.PORT || 3002;
|
||||
```
|
||||
|
||||
Ou utiliser une variable d'environnement:
|
||||
|
||||
```powershell
|
||||
$env:PORT=3002; node index-sse.js
|
||||
```
|
||||
|
||||
### Sécurisation avec API Key
|
||||
|
||||
Ajouter de l'authentification dans `index-sse.js`:
|
||||
|
||||
```javascript
|
||||
app.use((req, res, next) => {
|
||||
const apiKey = req.headers['x-api-key'];
|
||||
if (apiKey !== process.env.MCP_API_KEY) {
|
||||
return res.status(401).json({ error: 'Unauthorized' });
|
||||
}
|
||||
next();
|
||||
});
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛑 Arrêter le Serveur
|
||||
|
||||
Appuyez sur **Ctrl+C** dans le terminal.
|
||||
|
||||
Le serveur fermera proprement:
|
||||
- Arrêtera toutes les connexions SSE
|
||||
- Déconnectera Prisma de la base de données
|
||||
- Affichera un message de confirmation
|
||||
|
||||
---
|
||||
|
||||
## 📚 Documentation Complémentaire
|
||||
|
||||
- [README-SSE.md](./README-SSE.md) - Documentation détaillée des outils
|
||||
- [README.md](./README.md) - Documentation principale du serveur MCP
|
||||
- [N8N-SETUP.md](./N8N-SETUP.md) - Guide d'installation des workflows N8N
|
||||
- [N8N-WORKFLOWS.md](./N8N-WORKFLOWS.md) - Description des workflows N8N
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Dépannage
|
||||
|
||||
### Erreur: "Port 3001 already in use"
|
||||
|
||||
**Solution 1:** Changer le port dans `index-sse.js`:
|
||||
```javascript
|
||||
const PORT = process.env.PORT || 3002;
|
||||
```
|
||||
|
||||
**Solution 2:** Trouver et tuer le processus:
|
||||
```powershell
|
||||
Get-Process node | Where-Object {$_.Path -like "*index-sse*"}
|
||||
Stop-Process -Id $process.Id
|
||||
```
|
||||
|
||||
### Erreur: "Cannot connect from N8N"
|
||||
|
||||
**Checklist:**
|
||||
1. ✅ Serveur SSE en cours d'exécution (`http://localhost:3001` fonctionne)
|
||||
2. ✅ Firewall autorise le port 3001
|
||||
3. ✅ Utilisation de l'IP correcte (pas `localhost` depuis N8N distant)
|
||||
4. ✅ N8N peut atteindre votre réseau
|
||||
5. ✅ Utilisation de `http://` (pas `https://`)
|
||||
|
||||
**Test depuis N8N:**
|
||||
```bash
|
||||
curl http://YOUR_IP:3001/
|
||||
```
|
||||
|
||||
### Erreur: "Prisma Client not initialized"
|
||||
|
||||
**Solution:**
|
||||
```bash
|
||||
cd mcp-server
|
||||
npx prisma generate
|
||||
```
|
||||
|
||||
### SSE Connection Drops
|
||||
|
||||
C'est normal! SSE maintient une connexion persistante. Si elle chute:
|
||||
- Le client doit se reconnecter automatiquement
|
||||
- Vérifier la stabilité du réseau
|
||||
- Vérifier les paramètres firewall/proxy
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Architecture SSE vs stdio
|
||||
|
||||
| Fonctionnalité | SSE (index-sse.js) | stdio (index.js) |
|
||||
|---------------|----------------------|-------------------|
|
||||
| **Transport** | HTTP/SSE | Process local |
|
||||
| **Accès distant** | ✅ Oui | ❌ Non |
|
||||
| **Port** | 3001 | N/A |
|
||||
| **Utilisation N8N** | ✅ Parfait | ❌ Impossible |
|
||||
| **Utilisation Cursor** | ✅ Possible | ✅ Parfait |
|
||||
| **Setup** | Moyen | Simple |
|
||||
| **Latence** | Faible | Très faible |
|
||||
| **Outils** | 19 | 19 |
|
||||
|
||||
**Recommandation:**
|
||||
- **SSE** pour N8N sur machine distante ✅
|
||||
- **stdio** pour Cursor sur la même machine ✅
|
||||
|
||||
---
|
||||
|
||||
## 🎉 Démarrage Rapide (Récapitulatif)
|
||||
|
||||
```bash
|
||||
# 1. Démarrer Keep Notes (terminal 1)
|
||||
cd keep-notes
|
||||
npm run dev
|
||||
|
||||
# 2. Démarrer le serveur MCP SSE (terminal 2)
|
||||
cd mcp-server
|
||||
.\start-sse.ps1
|
||||
|
||||
# 3. Configurer N8N avec: http://YOUR_IP:3001/sse
|
||||
# 4. Importer et activer les workflows N8N
|
||||
# 5. Utiliser les outils MCP dans vos workflows!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Version:** 2.0.0
|
||||
**Dernière mise à jour:** 18 janvier 2026
|
||||
**Status:** ✅ Production Ready
|
||||
Reference in New Issue
Block a user