# easy-sqlite-mcp A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server implemented in Node.js and TypeScript, designed to enable LLMs to interact directly with SQLite databases. This project uses Node.js, TypeScript, the official MCP SDK, and `better-sqlite3`. It runs over stdio, so it can be used directly by MCP clients such as Claude Desktop, Codex, and OpenCode. ## Features - SQLite connection management for manual and fixed startup modes - Read-only query tool for data retrieval - Execute tool for data modification and schema statements - Schema discovery tools for tables, views, indexes, and triggers - Lightweight, synchronous SQLite access powered by `better-sqlite3` `better-sqlite3` in this project requires Node.js 22 or newer. Use Node.js 22 LTS for the most reliable prebuilt-binary availability on Windows. ## Requirements - Node.js 22 or newer (Node.js 22 LTS recommended) - npm - A reachable SQLite database file ## Installation Run the server directly with `npx`: ```bash npx -y easy-sqlite-mcp ``` For local development after cloning the repository: ```bash cd easy-sqlite-mcp npm install npm run build ``` ## Configuration Configure the server with environment variables in your MCP client configuration or shell environment. | Variable | Required | Default | Description | | --- | --- | --- | --- | | `SQLITE_PATH` | No | - | Absolute or relative path to a SQLite database file. When set, the server starts in fixed mode | Example shell configuration: ```bash SQLITE_PATH=/absolute/path/to/database.sqlite npx -y easy-sqlite-mcp ``` In PowerShell: ```powershell $env:SQLITE_PATH = "C:\data\database.sqlite" npx -y easy-sqlite-mcp ``` The server communicates over stdio and is normally launched by an MCP client rather than run manually. If you are unsure how a tool should be used, or an operation fails, call `sqlite_manual` first. It returns the built-in manual with safe usage rules, placeholder guidance, and lifecycle notes. ## Modes Easy SQLite MCP supports two startup modes. The server description is generated at startup so MCP clients and agents can clearly understand which mode is active. ### Manual Mode Manual mode is used when `SQLITE_PATH` is not provided. In this mode, the agent must explicitly open and close a database: 1. Call `sqlite_open(path)` before using database tools. 2. Use query, execute, and schema discovery tools. 3. Call `sqlite_close` when finished. Only one SQLite database file can be open at a time. Opening another file closes the previous connection first. Server description: ```text Manual: This is a SQLite tool. Before using it, call sqlite_open(path) to open a database file. After use, call sqlite_close to close it. Only one database file can be open at a time. ``` Available tools in Manual mode: - `sqlite_open` - `sqlite_close` - `sqlite_status` - `sqlite_query` - `sqlite_execute` - `sqlite_list_tables` - `sqlite_describe_table` ### Fixed Mode Fixed mode is used when `SQLITE_PATH` is provided as an environment variable. In this mode, the server automatically opens the configured SQLite database during startup. The agent does not need to call `sqlite_open`, and connection switching is disabled. Server description: ```text Fixed: This is a SQLite tool connected to Path: ``` Available tools in Fixed mode: - `sqlite_status` - `sqlite_query` - `sqlite_execute` - `sqlite_list_tables` - `sqlite_describe_table` ## Claude Desktop Example Manual mode: ```json { "mcpServers": { "easy-sqlite-mcp": { "command": "npx", "args": ["-y", "easy-sqlite-mcp"] } } } ``` Fixed mode example: ```json { "mcpServers": { "easy-sqlite-mcp": { "command": "npx", "args": ["-y", "easy-sqlite-mcp"], "env": { "SQLITE_PATH": "/absolute/path/to/database.sqlite" } } } } ``` Restart Claude Desktop after updating the configuration. ## Codex config.toml Example Manual mode: ```toml [mcp_servers.easy-sqlite-mcp] args = ["-y", "easy-sqlite-mcp"] command = "npx" enabled = true ``` Fixed mode example: ```toml [mcp_servers.easy-sqlite-mcp] args = ["-y", "easy-sqlite-mcp"] command = "npx" enabled = true [mcp_servers.easy-sqlite-mcp.env] SQLITE_PATH = "/absolute/path/to/database.sqlite" ``` ## OpenCode opencode.jsonc Example Manual mode: ```jsonc { "$schema": "https://opencode.ai/config.json", "mcp": { "easy-sqlite-mcp": { "type": "local", "command": ["npx", "-y", "easy-sqlite-mcp"], "enabled": true } } } ``` Fixed mode example: ```jsonc { "$schema": "https://opencode.ai/config.json", "mcp": { "easy-sqlite-mcp": { "type": "local", "command": ["npx", "-y", "easy-sqlite-mcp"], "enabled": true, "environment": { "SQLITE_PATH": "/absolute/path/to/database.sqlite" } } } } ``` ## Available Tools | Tool | Description | | --- | --- | | `sqlite_manual` | Return the built-in manual. Use this first when you are unsure how to use SQLite tools or need help diagnosing an operation error | | `sqlite_open` | Open a SQLite database file. Manual mode only | | `sqlite_close` | Close the current database connection. Manual mode only | | `sqlite_status` | Return connection status and current database summary | | `sqlite_query` | Execute a read-only `SELECT` query | | `sqlite_execute` | Execute a write or modification SQL statement | | `sqlite_list_tables` | List all user tables in the database | | `sqlite_describe_table` | Describe the schema of a table | ## Manual Mode Notes - Use `sqlite_open(path)` before calling query or execute tools. - Use `sqlite_close` when finished. - Only one database file can be open at a time. - Use `sqlite_manual` when you need lifecycle or placeholder guidance. ## Development ```bash npm run build npm run dev npm test ``` ## License MIT. See [LICENSE.md](LICENSE.md).