/ Annuaire / Playground / SQLite
● Officiel modelcontextprotocol ⚡ Instantané

SQLite

par modelcontextprotocol · modelcontextprotocol/servers

Interroger un fichier SQLite local. Parfait pour des projets personnels, des exports de données, ou de l'analyse sur un fichier journal/log/db.

Le MCP SQLite de référence. Pointe vers un seul fichier SQLite et expose l'introspection de schéma, les requêtes de lecture et d'écriture (configurable). Zéro configuration, aucun serveur, aucun réseau — et contrairement à Postgres MCP, il peut aussi écrire si vous le lui permettez.

Pourquoi l'utiliser

Fonctionnalités clés

Démo en direct

Aperçu en pratique

sqlite.replay ▶ prêt
0/0

Installer

Choisissez votre client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

Ouvrez Claude Desktop → Settings → Developer → Edit Config. Redémarrez après avoir enregistré.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

Cursor utilise le même schéma mcpServers que Claude Desktop. La config projet l'emporte sur la globale.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

Cliquez sur l'icône MCP Servers dans la barre latérale Cline, puis "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  }
}

Même format que Claude Desktop. Redémarrez Windsurf pour appliquer.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "sqlite",
      "command": "uvx",
      "args": [
        "mcp-server-sqlite",
        "--db-path",
        "/data/sample.db"
      ]
    }
  ]
}

Continue utilise un tableau d'objets serveur plutôt qu'une map.

~/.config/zed/settings.json
{
  "context_servers": {
    "sqlite": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-server-sqlite",
          "--db-path",
          "/data/sample.db"
        ]
      }
    }
  }
}

Ajoutez dans context_servers. Zed recharge à chaud à la sauvegarde.

claude mcp add sqlite -- uvx mcp-server-sqlite --db-path /data/sample.db

Une seule ligne. Vérifiez avec claude mcp list. Supprimez avec claude mcp remove.

Cas d'usage

Usages concrets : SQLite

Analyser un dump CSV/JSON en le chargeant dans SQLite

👤 Analystes, ingénieurs explorant des données exportées ⏱ ~15 min beginner

Quand l'utiliser : Quelqu'un vous a envoyé un CSV avec 200k lignes et la question 'quel segment convertit le mieux ?' — trop gros pour des feuilles de calcul, trop petit pour une vraie base de données.

Prérequis
  • Fichier source sur le disque — Enregistrez-le en .csv ou .json dans un dossier de travail
  • Un chemin de fichier SQLite vide — Choisissez un emplacement comme /tmp/analysis.db ; le MCP le créera
Déroulement
  1. Créer la table et charger
    Créez une table signups dans /tmp/analysis.db correspondant aux colonnes de /data/signups.csv. Chargez toutes les lignes. Dites-moi le nombre de lignes.✓ Copié
    → Table créée, le nombre de lignes correspond au fichier
  2. Explorer le schéma
    Quelles colonnes existent ? Pour chacune, quelle est la distribution des valeurs (top 5 valeurs distinctes pour les catégories ; min/max/moyenne pour les numériques) ?✓ Copié
    → Profil par colonne
  3. Répondre à la vraie question
    Grouper par signup_source. Pour chacun, calculer : total des inscriptions, taux de conversion (inscriptions avec completed_onboarding=true / total). Trier par taux de conversion.✓ Copié
    → Table prête pour la décision avec le SQL affiché

Résultat : Des réponses défendables en 5 minutes, avec un fichier .db que vous pouvez réinterroger à mesure que de nouvelles questions émergent.

Pièges
  • Les colonnes CSV sont mal typées automatiquement (nombres en TEXT) — Après le chargement, exécutez PRAGMA table_info(signups) et CAST ou recréez les colonnes avec des types explicites si nécessaire
  • Les chaînes de date ne se trient/comparent pas correctement en TEXT — Stockez les dates en ISO 8601 (YYYY-MM-DDTHH:MM:SSZ) pour que lexicographique = chronologique ; ou utilisez julianday() pour les calculs
Combiner avec : filesystem · antv-chart

Inspecter et éditer la base de données SQLite d'une application personnelle

👤 Devs construisant des outils CLI, des apps journal, ou des logiciels local-first ⏱ ~10 min beginner

Quand l'utiliser : Vous construisez une app local-first, vous voulez voir ce qui est dans la DB sans écrire une CLI pour cela.

Déroulement
  1. Examiner le schéma
    Listez toutes les tables dans /Users/me/Library/Application Support/MyApp/data.db. Pour chacune, montrez le schéma et le nombre de lignes.✓ Copié
    → Inventaire de la DB de l'app en direct
  2. Enquêter sur une ligne
    Trouvez l'enregistrement utilisateur où email = '[email protected]'. Montrez la ligne et toute ligne associée dans d'autres tables (orders, sessions).✓ Copié
    → Image complète des données d'un utilisateur
  3. Corriger les mauvaises données
    Il y a une commande bloquée en état 'pending' pour cet utilisateur d'il y a 2 jours. Mettez-la à jour en 'cancelled'. Montrez le SQL avant d'exécuter.✓ Copié
    → Aperçu du SQL avant mutation, puis ligne mise à jour

Résultat : Débogage d'app sans écrire des scripts SQL jetables.

Pièges
  • L'app peut avoir la DB verrouillée en mode WAL — Si vous obtenez 'database is locked', arrêtez l'app, ou interrogez l'snapshot en lecture seule fusionné WAL via ?mode=ro&immutable=1
Combiner avec : filesystem

Construire des fixtures de test déterministes à partir d'un échantillon de données prod

👤 Ingénieurs écrivant des tests d'intégration ⏱ ~25 min intermediate

Quand l'utiliser : Vous voulez des données de test répétables qui ressemblent à la prod mais sont petites et sûres.

Déroulement
  1. Échantillonner les lignes anonymisées
    À partir de /prod-export/orders.db, échantillonnez 100 lignes de orders couvrant chaque statut. Anonymisez les noms et emails.✓ Copié
    → Échantillon avec PII anonymisé
  2. Enregistrer en tant que fichier fixture
    Écrivez les lignes échantillonnées dans /test/fixtures/orders.db en tant que nouveau fichier SQLite. Incluez le schéma.✓ Copié
    → Nouveau fichier fixture créé
  3. Vérifier par rapport à votre test loader
    Exécutez ma suite de tests (npm test) — détecte-t-elle la nouvelle fixture ? Si non, quel est le premier test échoué ?✓ Copié
    → Tests exécutés ; défaillances identifiées

Résultat : Des fixtures réalistes qui ne dérivent pas des formes de données réelles.

Pièges
  • Anonymisation qui casse l'intégrité référentielle — Anonymisez les clés de jointure de manière cohérente (même hash) dans les tables ; ne randomisez jamais par ligne
Combiner avec : filesystem · github

Analyser un fichier log/événement sauvegardé par SQLite

👤 Ingénieurs déboguant des outils CLI ou des apps qui font un logging dans SQLite ⏱ ~10 min beginner

Quand l'utiliser : De nombreux outils modernes (homebrew, certains navigateurs, caches d'app) stockent l'état dans SQLite. Vous voulez les interroger.

Déroulement
  1. Confirmer que c'est le bon fichier
    Ouvrez ~/Library/Application Support/SomeApp/cache.db. Listez les tables et un échantillon de lignes récentes.✓ Copié
    → Un schéma reconnaissable confirme que vous avez le bon fichier
  2. Trouver la réponse
    Combien d'entrées le cache détient-il par domaine source ? Top 20.✓ Copié
    → Résultat d'agrégation
  3. Optionnellement nettoyer
    Supprimez les entrées des domaines qui n'ont pas été consultés depuis 90 jours. Montrez le comptage d'abord, demandez avant de supprimer.✓ Copié
    → Aperçu, confirmation, puis suppression

Résultat : Des réponses sur le comportement de l'app sans besoin d'une commande 'stats' intégrée.

Pièges
  • Modifier la DB en direct d'une app pendant que l'app s'exécute peut la corrompre — Fermez toujours l'app d'abord, ou travaillez sur une copie du fichier .db
Combiner avec : filesystem

Combinaisons

Associez-le à d'autres MCPs pour un effet X10

sqlite + filesystem

Lire un CSV à partir du disque et le charger dans SQLite pour l'analyse

Lisez /data/orders.csv avec filesystem MCP, déduisez les types, et chargez dans /tmp/analysis.db en tant que table orders via sqlite MCP.✓ Copié
sqlite + antv-chart

Interroger une DB SQLite et afficher les résultats sous forme de graphique

À partir de /tmp/analysis.db, obtenez les inscriptions mensuelles pour 2026. Affichez sous forme de graphique en barres via antv-chart.✓ Copié
sqlite + github

Analyser les données, écrire les découvertes dans une Issue GitHub

Exécutez mon analyse de churn sur /tmp/users.db. Créez une Issue GitHub dans acme/analytics résumant les 3 principales découvertes avec l'appendice SQL.✓ Copié

Outils

Ce que ce MCP expose

OutilEntréesQuand appelerCoût
list_tables aucun Première étape de toute session gratuit
describe_table table_name: str Inspecter le schéma d'une seule table gratuit
read_query query: str (SELECT uniquement) Exécuter un SELECT — sûr par défaut gratuit
write_query query: str (INSERT/UPDATE/DELETE) Muter les données — contrôlé ; nécessite un consentement explicite dans la plupart des clients gratuit
create_table query: str (CREATE TABLE ...) DDL — créer ou modifier le schéma gratuit
append_insight insight: str Ajouter une découverte au mémo de session (utilisé par certains clients pour construire un rapport) gratuit

Coût et limites

Coût d'exécution

Quota d'API
Illimité — local
Tokens par appel
Requêtes de schéma : petit. Les ensembles de résultats évoluent avec le nombre de lignes — toujours LIMIT pour les requêtes exploratoires
Monétaire
Gratuit
Astuce
Ajoutez LIMIT 100 à chaque requête exploratoire et supprimez-le uniquement quand vous savez ce que vous allez récupérer.

Sécurité

Permissions, secrets, portée

Stockage des identifiants : Pas de credentials. Le fichier DB est quel que soit le chemin que vous lancez via --db-path.
Sortie de données : Aucun depuis le serveur. Les résultats de requête sont envoyés à votre fournisseur LLM en tant que contexte.
Ne jamais accorder : ne pointez jamais vers un fichier contenant des données sensibles à moins que vous n'ayez l'intention que le modèle les voit

Dépannage

Erreurs courantes et correctifs

base de données verrouillée

Un autre processus (souvent l'app qui possède la DB) maintient le verrou. Fermez ce processus ou copiez le fichier .db et interrogez la copie.

Vérifier : lsof <db file>
pas de table : X

Mauvais fichier DB ou schéma différent de ce que vous pensez. Exécutez list_tables pour voir ce qui s'y trouve réellement. Vérifiez l'argument de lancement --db-path dans votre config de client MCP.

incompatibilité de type / NULL inattendu

SQLite est typé dynamiquement — une colonne déclarée INTEGER peut contenir du TEXT. Utilisez CAST(col AS INTEGER) de manière défensive, ou corrigez au chargement.

L'image disque est corrompue

DB corrompue, souvent par interruption d'un processus pendant une écriture. Essayez sqlite3 file.db .recover > out.sql et reconstruisez à partir du dump.

Alternatives

SQLite vs autres

AlternativeQuand l'utiliserCompromis
Postgres MCPAccès concurrent multi-utilisateur, DB en réseau, ou vous êtes déjà sur PostgresNécessite un serveur ; Postgres MCP est en lecture seule par conception
DuckDB (via shell)Même modèle d'un seul fichier mais pour l'analyse en forme OLAP avec des scans beaucoup plus rapidesPas de MCP propriétaire pour le moment ; colonnaire donc des caractéristiques de perf différentes
dbHubVous avez besoin d'un MCP pour SQLite + Postgres + MySQL + autresPlus récent ; moins éprouvé au combat

Plus

Ressources

📖 Lire le README officiel sur GitHub

🐙 Voir les issues ouvertes

🔍 Parcourir les 400+ serveurs MCP et Skills