db-mcp is a comprehensive SQLite server for AI-driven database interactions, offering 122 specialized tools across analytics, search, and administration with dual backends and enterprise-grade security.
Database Operations: CRUD operations, schema management, indexing, views, and constraints with 8 core tools
Transaction Support: Full ACID compliance with begin, commit, rollback, and savepoints (7 tools, native backend)
JSON Processing: Full JSON/JSONB manipulation, schema analysis, and operations (23 tools)
Text Processing: Regex, fuzzy matching, phonetic search, and similarity analysis (17 tools)
Full-Text Search: FTS5 with BM25 ranking, search optimization, and index management (4 tools)
Statistical Analysis: Descriptive statistics, percentiles, regression, outlier detection (13-19 tools)
Window Functions: ROW_NUMBER, RANK, LAG/LEAD, running totals, moving averages (6 tools, native only)
Vector/Semantic Search: AI embeddings, cosine similarity, hybrid search (11 tools)
Geospatial Operations: Distance calculations, bounding boxes, SpatiaLite GIS capabilities (4-11 tools, native backend)
Virtual Tables: CSV, R-Tree, series, views, vacuum, and dbstat support (13 tools)
Administration: Backup, restore, PRAGMA operations, transaction management, health monitoring (33 tools)
Security: OAuth 2.1 authentication (RFC 9728/8414 compliant) with granular scope-based authorization (read, write, admin, database-specific, table-specific) and SQL injection prevention
Multiple Backends: WASM (102 tools, cross-platform) or Native (122 tools, full features) SQLite implementations
Tool Filtering: Configure tool sets with presets (starter, analytics, search, spatial, minimal, full) or custom groups to manage AI IDE limits
Resources: Read database metadata through 8 resources (schema, tables, indexes, views, health, configuration, insights)
AI Assistance: 10 prompts for schema explanation, query building, data analysis, optimization, migration scripts, debugging, and documentation
Flexible Deployment: Supports STDIO, HTTP/SSE (stateful/stateless), Docker, Node.js, and direct IDE integration (Cursor)
Extensions: Built-in FTS5, JSON1, R-Tree, plus loadable CSV and SpatiaLite extensions
Performance: Configurable metadata caching with automatic invalidation on DDL operations
Provides database operation tools for connecting to and managing MongoDB databases with support for OAuth 2.0 authentication and granular access control
Provides database operation tools for connecting to and managing MySQL databases with support for OAuth 2.0 authentication and granular access control
Provides database operation tools for connecting to and managing PostgreSQL databases with support for OAuth 2.0 authentication and granular access control
Provides database operation tools for connecting to and managing Redis databases with support for OAuth 2.0 authentication and granular access control
Provides database operation tools for connecting to and managing SQLite databases with support for OAuth 2.0 authentication and granular access control
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@db-mcpshow me the top 10 customers by total orders from the PostgreSQL sales database"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
db-mcp (SQLite MCP Server)
SQLite MCP Server with 139 specialized tools, 8 data resources + 9 help resources, and 10 prompts, HTTP/SSE Transport, OAuth 2.1 authentication, tool filtering, granular access control, and structured error handling with categorized, actionable responses. Available in WASM and better-sqlite3 variants.
๐ฏ What Sets Us Apart
Feature | Description |
139 Specialized Tools | The most comprehensive SQLite MCP server available โ core CRUD, JSON/JSONB, FTS5 full-text search, statistical analysis, vector search, geospatial/SpatiaLite, introspection, migration, and admin |
17 Resources | 8 data resources (schema, tables, indexes, views, health, metadata, insights) + 9 help resources ( |
10 AI-Powered Prompts | Guided workflows for schema exploration, query building, data analysis, optimization, migration, debugging, and hybrid FTS5 + vector search |
Code Mode | Massive Token Savings: Execute complex, multi-step operations inside a fast, secure JavaScript sandbox. Instead of spending thousands of tokens on back-and-forth tool calls, Code Mode exposes all 139 capabilities locally, reducing token overhead by up to 90% and supercharging AI agent reasoning |
Token-Optimized Payloads | Every tool response is designed for minimal token footprint. Tools include |
Dual SQLite Backends | WASM (sql.js) for zero-compilation portability, Native (better-sqlite3) for full features including transactions, window functions, and SpatiaLite GIS |
Performance | โ ๏ธ WASM Caution: Synchronous execution blocks Node Event Loop on heavy workloads. ๐ Native: High-performance concurrent execution. |
OAuth 2.1 + Access Control | Enterprise-ready security with RFC 9728/8414 compliance, granular scopes ( |
Smart Tool Filtering | 9 tool groups + 7 shortcuts let you stay within IDE limits while exposing exactly what you need |
HTTP Streaming Transport | Streamable HTTP ( |
Production-Ready Security | SQL injection protection, parameterized queries, input validation, sandboxed code execution, HTTP body size enforcement, 7 security headers, server timeouts (slowloris protection), Retry-After rate limiting, |
Strict TypeScript | 100% type-safe codebase with strict mode, no |
Deterministic Error Handling | Every tool returns structured |
MCP 2025-03-26 Compliant | Full protocol support with tool safety hints, resource priorities, and progress notifications |
๐ Quick Start
Option 1: Docker (Recommended)
Pull and run instantly:
docker pull writenotenow/db-mcp:latestRun with volume mount:
docker run -i --rm \
-v $(pwd):/workspace \
writenotenow/db-mcp:latest \
--sqlite-native /workspace/database.dbOption 2: Node.js Installation
Clone the repository:
git clone https://github.com/neverinfamous/db-mcp.gitNavigate to directory:
cd db-mcpInstall dependencies:
npm installBuild the project:
npm run buildRun the server:
# Native backend (better-sqlite3) - Full features, requires Node.js native build
node dist/cli.js --transport stdio --sqlite-native ./database.db
# WASM backend (sql.js) - Cross-platform, no compilation required
node dist/cli.js --transport stdio --sqlite ./database.dbBackend Choice: Use
--sqlite-nativefor full features (139 tools, transactions, window functions, SpatiaLite). Use--sqlitefor WASM mode (115 tools, no native dependencies).
Verify It Works
node dist/cli.js --transport stdio --sqlite-native :memory:Expected output:
[db-mcp] Starting MCP server...
[db-mcp] Registered adapter: Native SQLite Adapter (better-sqlite3) (sqlite:default)
[db-mcp] Server started successfullyRun the test suite:
npm run testPrerequisites
โ Docker installed and running (for Docker method)
โ Node.js 24+ (LTS) (for local installation)
๐๏ธ Tool Filtering
AI-enabled IDEs like Cursor have tool limits. With 139 tools in the native backend, you must use tool filtering to stay within limits. Use shortcuts or specify groups to enable only what you need.
Quick Start: Recommended Configurations
โญ Recommended: Code Mode (Maximum Token Savings)
Code Mode (sqlite_execute_code) provides access to all 139 tools' worth of capability through a single, secure JavaScript sandbox. Instead of spending thousands of tokens on back-and-forth tool calls, Code Mode exposes all capabilities locally โ reducing token overhead by up to 90%.
{
"mcpServers": {
"db-mcp-sqlite": {
"command": "node",
"args": [
"C:/path/to/db-mcp/dist/cli.js",
"--transport",
"stdio",
"--sqlite-native",
"C:/path/to/database.db",
"--tool-filter",
"codemode"
]
}
}
}This exposes just sqlite_execute_code plus built-in tools. The agent writes JavaScript against the typed sqlite.* SDK โ composing queries, chaining operations across all 9 tool groups, and returning exactly the data it needs โ in one execution.
Starter (50 tools)
If you prefer individual tool calls, starter provides Core + JSON + Text:
{
"args": ["--tool-filter", "starter"]
}Custom Groups
Specify exactly the groups you need:
{
"args": ["--tool-filter", "core,json,stats"]
}Shortcuts (Predefined Bundles)
Note: Native includes FTS5 (4), window functions (6), transactions (7), and SpatiaLite (7) not available in WASM.
Shortcut | WASM | Native | + Built-in | What's Included |
| 46 | 50 | +3 | Core, JSON, Text |
| 46 | 52 | +3 | Core, JSON, Stats |
| 34 | 38 | +3 | Core, Text, Vector |
| 25 | 32 | +3 | Core, Geo, Vector |
| 25 | 25 | +3 | Core, Introspection, Migration |
| 10 | 10 | +3 | Core only |
| 115 | 139 | +3 | Everything enabled |
Tool Groups (10 Available)
Note: +3 built-in tools (server_info, server_health, list_adapters) and +1 code mode are always included.
Group | WASM | Native | + Built-in | Description |
| 1 | 1 | +3 | Code Mode (sandboxed code execution) ๐ |
| 10 | 10 | +3 | Basic CRUD, schema, tables |
| 24 | 24 | +3 | JSON/JSONB operations, analysis |
| 14 | 18 | +3 | Text processing + FTS5 + advanced search |
| 14 | 20 | +3 | Statistical analysis (+ window funcs) |
| 12 | 12 | +3 | Embeddings, similarity search |
| 27 | 34 | +3 | Backup, restore, virtual tables, pragma |
| 5 | 12 | +3 | Geospatial + SpatiaLite (Native only) |
| 10 | 10 | +3 | FK graph, cascade sim, storage/index audit |
| 7 | 7 | +3 | Migration tracking, apply, rollback (opt-in) |
Syntax Reference
Prefix | Target | Example | Effect |
(none) | Shortcut |
| Whitelist Mode: Enable ONLY this shortcut |
(none) | Group |
| Whitelist Mode: Enable ONLY this group |
(none) | Tool |
| Whitelist Mode: Enable ONLY this tool |
| Group |
| Add tools from this group to current set |
| Group |
| Remove tools in this group from current set |
| Tool |
| Add one specific tool |
| Tool |
| Remove one specific tool |
Custom Tool Selection
You can list individual tool names (without + prefix) to create a fully custom whitelist โ only the tools you specify will be enabled:
# Enable exactly 3 tools (whitelist mode)
--tool-filter "read_query,write_query,list_tables"
# Mix tools from different groups
--tool-filter "read_query,fuzzy_search,vector_search"
# Combine with a shortcut or group
--tool-filter "starter,+vector_search,+fuzzy_search"This is useful for scripted or automated clients that need a minimal, precise set of capabilities.
Examples:
--tool-filter "starter"
--tool-filter "core,json,text,fts5"
--tool-filter "starter,+stats"
--tool-filter "starter,-fts5"Legacy Syntax (still supported):
If you start with a negative filter (e.g., -vector,-geo), it assumes you want to start with all tools enabled and then subtract.
--tool-filter "-stats,-vector,-geo,-backup,-monitoring,-transactions,-window"๏ฟฝ SQLite Extensions
SQLite supports both built-in extensions (compiled into better-sqlite3) and loadable extensions (require separate binaries).
Built-in Extensions (work out of box)
Extension | Purpose | Status |
FTS5 | Full-text search with BM25 ranking | โ Always loaded |
JSON1 | JSON functions (json_extract, etc.) | โ Always loaded |
R-Tree | Spatial indexing for bounding boxes | โ Always loaded |
Loadable Extensions (require installation)
Extension | Purpose | Tools | CLI Flag |
CSV | CSV virtual tables | 2 |
|
SpatiaLite | Advanced GIS capabilities | 7 |
|
Installing Extensions
CSV Extension:
# Download precompiled binary or compile from SQLite source:
# https://www.sqlite.org/csv.html
# Set environment variable:
export CSV_EXTENSION_PATH=/path/to/csv.so # Linux
export CSV_EXTENSION_PATH=/path/to/csv.dll # Windows
# Or use CLI flag:
db-mcp --sqlite-native ./data.db --csvSpatiaLite Extension:
# Linux (apt):
sudo apt install libspatialite-dev
# macOS (Homebrew):
brew install libspatialite
# Windows: Download from https://www.gaia-gis.it/gaia-sins/
# Set environment variable:
export SPATIALITE_PATH=/path/to/mod_spatialite.so
# Or use CLI flag:
db-mcp --sqlite-native ./data.db --spatialiteNote: Extension binaries must match your platform and architecture. The server searches common paths automatically, or use the
CSV_EXTENSION_PATH/SPATIALITE_PATHenvironment variables for custom locations.
๐ Resources
Data Resources (8)
MCP resources provide read-only access to database metadata:
Resource | URI | Description | Min Config |
|
| Full database schema |
|
|
| List all tables |
|
|
| Schema for a specific table |
|
|
| All indexes in the database |
|
|
| All views in the database |
|
|
| Database health and status | (read-only) |
|
| Database metadata and PRAGMAs |
|
|
| Business insights memo (analysis) |
|
Help Resources (1 + up to 8)
On-demand tool reference documentation, filtered by --tool-filter:
Resource | URI | Description | When Registered |
|
| Gotchas, WASM vs Native, Code Mode API | Always |
|
| JSON/JSONB operations reference | When json group on |
|
| Text processing + FTS5 reference | When text group on |
|
| Statistical analysis + window functions reference | When stats group on |
|
| Vector/semantic search reference | When vector group on |
|
| Geospatial + SpatiaLite reference | When geo group on |
|
| Admin, transactions, backup, virtual tables reference | When admin group on |
|
| Schema introspection, FK graph, diagnostics reference | When introspection group on |
|
| Migration tracking, apply, rollback reference | When migration group on |
Efficiency Tip: Data resources are always readable regardless of tool configuration. The "Min Config" column shows the smallest configuration that provides tools to act on what the resource exposes. Help resources are served on-demand โ agents read them only when working with a specific tool group.
๐ฌ Prompts (10)
MCP prompts provide AI-assisted database workflows:
Prompt | Description |
| Explain database structure and relationships |
| Help construct SQL queries for common operations |
| Analyze data patterns and provide insights |
| Analyze and suggest database optimizations |
| Help create database migration scripts |
| Debug SQL queries that aren't working |
| Generate documentation for the database schema |
| Intelligent table analysis and summary |
| Hybrid FTS5 + vector search workflow |
| Interactive demo of MCP capabilities |
๐ง Configuration
Environment Variables
Variable | Default | Description |
|
| Host/IP to bind to (CLI: |
| โ | SQLite database path (CLI: |
| โ | Tool filter string (CLI: |
| โ | Simple bearer token for HTTP auth (CLI: |
|
| Enable OAuth 2.1 (CLI: |
| โ | Authorization server URL (CLI: |
| โ | Expected token audience (CLI: |
| โ | JWKS URI, auto-discovered if omitted (CLI: |
|
| Clock tolerance in seconds (CLI: |
|
| Log verbosity: |
|
| Schema cache TTL in ms (auto-invalidated on DDL operations) |
|
| Code Mode sandbox: |
|
| Max requests/minute per IP (HTTP transport) |
| โ | Custom path to CSV extension binary (native only) |
| โ | Custom path to SpatiaLite extension binary (native only) |
Tip: Lower
METADATA_CACHE_TTL_MSfor development (e.g.,1000), or increase it for production with stable schemas (e.g.,60000= 1 min). Schema cache is automatically invalidated on DDL operations (CREATE/ALTER/DROP).
CLI Reference
db-mcp [options]
Transport: --transport <stdio|http|sse> --port <N> --server-host <host> --stateless
Auth: --auth-token <token> | --oauth-enabled --oauth-issuer <url> --oauth-audience <aud>
Database: --sqlite <path> | --sqlite-native <path>
Extensions: --csv --spatialite (native only)
Server: --name <name> --version <ver> --tool-filter <filter>CLI flags override environment variables. Run
node dist/cli.js --helpfor full details.
๐ MCP Client Configuration
Add to your ~/.cursor/mcp.json, Claude Desktop config, or equivalent:
{
"mcpServers": {
"db-mcp-sqlite": {
"command": "node",
"args": [
"C:/path/to/db-mcp/dist/cli.js",
"--transport",
"stdio",
"--sqlite-native",
"C:/path/to/your/database.db",
"--tool-filter",
"codemode"
]
}
}
}Variants (modify the args array above):
Variant | Change |
WASM backend | Replace |
In-memory database | Replace the database path with |
Starter preset | Replace |
CSV extension | Add |
SpatiaLite | Add |
Linux/macOS | Use forward-slash Unix paths (e.g., |
Docker | Replace |
See Tool Filtering to customize which tools are exposed.
HTTP/SSE Transport (Remote Access)
For remote access, web-based clients, or MCP Inspector testing, run the server in HTTP mode:
node dist/cli.js --transport http --port 3000 --server-host 0.0.0.0 --sqlite-native ./database.dbEndpoints:
Endpoint | Description | Mode |
| Server info and available endpoints | Both |
| JSON-RPC requests (initialize, tools/call, etc.) | Both |
| SSE stream for server-to-client notifications | Stateful |
| Session termination | Stateful |
| Legacy SSE connection (MCP 2024-11-05) | Stateful |
| Legacy SSE message endpoint | Stateful |
| Health check (always public) | Both |
Session Management: The server uses stateful sessions by default. Include the mcp-session-id header (returned from initialization) in subsequent requests for session continuity.
Security Features:
7 Security Headers โ
X-Content-Type-Options,X-Frame-Options,Content-Security-Policy,Cache-Control,Referrer-Policy(no-referrer),Permissions-Policy+ opt-inStrict-Transport-SecurityviaenableHSTSServer Timeouts โ Request, keep-alive, and headers timeouts prevent slowloris-style DoS
Rate Limiting โ 100 requests/minute per IP (429 + Retry-After on excess, health checks exempt)
CORS โ Configurable via
--cors-origins(default:*, supports wildcard subdomains like*.example.com). โ ๏ธ Security Warning: The default*allows requests from any origin. For production HTTP deployments, explicitly configure this to your trusted domains.Trust Proxy โ Opt-in
trustProxyfor X-Forwarded-For IP extraction behind reverse proxiesBody Size Limit โ Configurable via
--max-body-bytes(default: 1 MB)404 Handler โ Unknown paths return
{ error: "Not found" }Cross-Protocol Guard โ SSE session IDs rejected on
/mcpand vice versa
Stateless Mode (Serverless)
For serverless deployments (AWS Lambda, Cloudflare Workers, Vercel), use stateless mode:
node dist/cli.js --transport http --port 3000 --server-host 0.0.0.0 --stateless --sqlite-native :memory:Mode | Progress Notifications | Legacy SSE | Serverless |
Stateful (default) | โ Yes | โ Yes | โ ๏ธ Complex |
Stateless ( | โ No | โ No | โ Native |
๐ Authentication
db-mcp supports two authentication mechanisms for HTTP transport:
Simple Bearer Token (--auth-token)
Lightweight authentication for development or single-tenant deployments:
# CLI
node dist/cli.js --transport http --port 3000 --auth-token my-secret --sqlite-native ./database.db
# Environment variable
export MCP_AUTH_TOKEN=my-secret
node dist/cli.js --transport http --port 3000 --sqlite-native ./database.dbClients must include Authorization: Bearer my-secret on all requests. /health and / are exempt. Unauthenticated requests receive 401 with WWW-Authenticate: Bearer headers per RFC 6750.
OAuth 2.1 (Enterprise)
Full OAuth 2.1 with RFC 9728/8414 compliance for production multi-tenant deployments:
Component | Status | Description |
Protected Resource Metadata | โ | RFC 9728 |
Auth Server Discovery | โ | RFC 8414 metadata discovery with caching |
Token Validation | โ | JWT validation with JWKS support |
Scope Enforcement | โ | Granular |
HTTP Transport | โ | Streamable HTTP with OAuth middleware |
Supported Scopes
Scope | Description |
| Read-only access to all databases |
| Read and write access to all databases |
| Full administrative access |
| Access to specific database only |
| Access to specific table only |
Quick Start with OAuth CLI Flags
node dist/cli.js --transport http --port 3000 \
--oauth-enabled \
--oauth-issuer http://localhost:8080/realms/db-mcp \
--oauth-audience db-mcp-server \
--sqlite-native ./database.dbAdditional flags:
--oauth-jwks-uri <url>(auto-discovered if omitted),--oauth-clock-tolerance <seconds>(default: 60).
Keycloak Integration
See docs/KEYCLOAK_SETUP.md for setting up Keycloak as your OAuth provider.
Priority: When both
--auth-tokenand--oauth-enabledare set, OAuth 2.1 takes precedence. If neither is configured, the server warns and runs without authentication.
๐ Benchmarks
Performance benchmarks measure framework overhead on critical hot paths using Vitest bench (tinybench). The suite validates that framework plumbing stays negligible relative to actual database I/O:
Tool dispatch: ~11M ops/sec โ Map-based lookup is effectively zero-cost
Auth scope checks: 7โ9M ops/sec โ OAuth middleware adds no measurable latency
Identifier validation: 6.4M ops/sec โ SQL sanitization is near-instant
Schema cache hits: 4.3M ops/sec โ metadata lookups avoid redundant queries
Debug log (filtered): 9.5M ops/sec โ disabled log levels are true no-ops (50ร faster than actual writes)
Code Mode security: 1.2M validations/sec for typical code, blocked patterns rejected in <1 ยตs
npm run bench # Run all benchmarks
npm run bench:verbose # Verbose mode with detailed timingsBenchmark | What It Measures |
Handler Dispatch | Tool lookup, error construction, progress notification overhead |
Utilities | Identifier sanitization, WHERE clause validation, SQL validation |
Tool Filtering | Filter parsing, group lookups, meta-group catalog generation |
Schema Parsing | Zod schema validation for simple/complex/large payloads + failure paths |
Logger & Sanitization | Log call overhead, message sanitization, sensitive data redaction |
Transport & Auth | Token extraction, scope checking, error formatting, rate limiting |
Code Mode | Sandbox creation, pool lifecycle, security validation, execution |
Database Operations | PRAGMA ops, table metadata, query result processing, schema caching |
Resource & Prompts | URI matching, content assembly, prompt generation, tool indexing |
Contributing
Contributions are welcome! Please read our Contributing Guidelines before submitting a pull request.
Security
For security concerns, please see our Security Policy.
โ ๏ธ Never commit credentials - Store secrets in
.env(gitignored)
License
This project is licensed under the MIT License - see the LICENSE file for details.
Code of Conduct
Please read our Code of Conduct before participating in this project.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.