Skip to main content
Glama

mcp-libsql

by Xexr
MIT License
2
14
  • Apple
  • Linux
README.md13.9 kB
# MCP libSQL by xexr A Model Context Protocol (MCP) server for libSQL database operations, providing secure database access through Claude Desktop, Claude Code, Cursor, and other MCP-compatible clients. Runs on Node, written in TypeScript ## 🔧 **Quick Start** 1. **Install:** ```bash pnpm install -g @xexr/mcp-libsql ``` 2. **Test locally:** ```bash mcp-libsql --url file:///tmp/test.db --log-mode console ``` 3. **Configure Claude Desktop** with your Node.js path and database URL (see configuration examples below) ## 🚀 **Status** ✅ **Complete database management capabilities** - All 6 core tools implemented and tested ✅ **Comprehensive security validation** - 67 security tests covering all injection vectors ✅ **Extensive test coverage** - 244 total tests (177 unit + 67 security) with 100% pass rate ✅ **Production deployment verified** - Successfully working with MCP clients ✅ **Robust error handling** - Connection retry, graceful degradation, and audit logging ## 🛠️ **Features** ### **Available Tools** - **read-query**: Execute SELECT queries with comprehensive security validation - **write-query**: INSERT/UPDATE/DELETE operations with transaction support - **create-table**: DDL operations for table creation with security measures - **alter-table**: Table structure modifications (ADD/RENAME/DROP operations) - **list-tables**: Database metadata browsing with filtering options - **describe-table**: Table schema inspection with multiple output formats ### **Security & Reliability** - **Multi-layer SQL injection prevention** with comprehensive security validation - **Connection pooling** with health monitoring and automatic retry logic - **Transaction support** with automatic rollback on errors - **Comprehensive audit logging** for security compliance > 🔐 **Security details:** See [docs/SECURITY.md](docs/SECURITY.md) for comprehensive security features and testing. ### **Developer Experience** - **Beautiful table formatting** with proper alignment and NULL handling - **Performance metrics** displayed for all operations - **Clear error messages** with actionable context - **Parameterized query support** for safe data handling - **Development mode** with enhanced logging and hot reload ## 📋 **Prerequisites** - **Node.js** 20+ - **pnpm** (or npm) package manager - **libSQL database** (file-based or remote) - **Claude Desktop** (for MCP integration) ### **Platform Requirements** - **macOS**: Native Node.js installation - **Linux**: Native Node.js installation - **Windows**: Native Node.js installation or WSL2 with Node.js installation ## 🔧 **Installation** ```bash # Use your package manager of choice, e.g. npm, pnpm, bun etc # Install globally pnpm install -g @xexr/mcp-libsql mcp-libsql -v # check version # ...or build from the repository git clone https://github.com/Xexr/mcp-libsql.git cd mcp-libsql pnpm install # Install dependencies pnpm build # Build the project node dist/index.js -v # check version ``` ## 🚀 **Usage** ### **Local Testing** Global installation assumed below, replace "mcp-libsql" with "node dist/index.js" if using local build ```bash # Test with file database (default: file-only logging) mcp-libsql --url file:///tmp/test.db # Test with HTTP database mcp-libsql --url http://127.0.0.1:8080 # Test with Turso database (environment variable, alternatively export the env var) LIBSQL_AUTH_TOKEN="your-token" mcp-libsql --url "libsql://your-db.turso.io" # Test with Turso database (CLI parameter) mcp-libsql --url "libsql://your-db.turso.io" --auth-token "your-token" # Development mode with console logging mcp-libsql --dev --log-mode console --url file:///tmp/test.db # Test with different logging modes mcp-libsql --url --log-mode both file:///tmp/test.db ``` ### **Claude Desktop Integration** Configure the MCP server in Claude Desktop based on your operating system: #### **macOS Configuration** 1. **Create configuration file** at `~/Library/Application Support/Claude/claude_desktop_config.json`: **Global install** ```json { "mcpServers": { "mcp-libsql": { "command": "mcp-libsql", "args": [ "--url", "file:///Users/username/database.db" ] } } } ``` **Alternative configuration for local build installation:** ```json { "mcpServers": { "mcp-libsql": { "command": "node", "args": [ "/Users/username/projects/mcp-libsql/dist/index.js", "--url", "file:///Users/username/database.db" ], } } } ``` **Alternative configuration for global install using nvm lts for node** ```json { "mcpServers": { "mcp-libsql": { "command": "zsh", "args": [ "-c", "source ~/.nvm/nvm.sh && nvm use --lts > /dev/null && mcp-libsql --url file:///Users/username/database.db", ], } } } ``` **Important**: The global installation method is recommended as it handles PATH automatically. #### **Linux Configuration** 1. **Create configuration file** at `~/.config/Claude/claude_desktop_config.json`: **Global install** ```json { "mcpServers": { "mcp-libsql": { "command": "mcp-libsql", "args": [ "--url", "file:///home/username/database.db" ] } } } ``` **Alternative configuration for local build installation:** ```json { "mcpServers": { "mcp-libsql": { "command": "node", "args": [ "/home/username/projects/mcp-libsql/dist/index.js", "--url", "file:///home/username/database.db" ], } } } ``` #### **Windows (WSL2) Configuration** 1. **Create configuration file** at `%APPDATA%\Claude\claude_desktop_config.json`: **Global install** ```json { "mcpServers": { "mcp-libsql": { "command": "wsl.exe", "args": [ "-e", "bash", "-c", "mcp-libsql --url file:///home/username/database.db", ] } } } ``` **Alternative configuration for local build installation:** ```json { "mcpServers": { "mcp-libsql": { "command": "wsl.exe", "args": [ "-e", "bash", "-c", "/home/username/projects/mcp-libsql/dist/index.js --url file:///home/username/database.db", ] } } } ``` **Alternative configuration for global install using nvm for node** ```json { "mcpServers": { "mcp-libsql": { "command": "wsl.exe", "args": [ "-e", "bash", "-c", "source ~/.nvm/nvm.sh && mcp-libsql --url file:///home/username/database.db", ] } } } ``` **Important**: Use `wsl.exe -e` (not just `wsl.exe`) to ensure proper command handling and avoid issues with server command reception on Windows. ### **Database Authentication** For Turso (and other credentialed) databases, you'll need an authentication token. There are two secure ways to provide it: _Global installation shown below, adjust accordingly for your setup_ #### **Method 1: Environment Variable (Recommended)** **Configure Claude Desktop with environment variable** (macOS/Linux example): ```bash export LIBSQL_AUTH_TOKEN="your-turso-auth-token-here" ``` ```json { "mcpServers": { "mcp-libsql": { "command": "mcp-libsql", "args": [ "--url", "libsql://your-database.turso.io" ] } } } ``` #### **Method 2: CLI Parameter** ```json { "mcpServers": { "mcp-libsql": { "command": "mcp-libsql", "args": [ "--url", "libsql://your-database.turso.io", "--auth-token", "your-turso-auth-token-here" ] } } } ``` #### **Getting Your Turso Auth Token** 1. **Install Turso CLI:** ```bash curl -sSfL https://get.tur.so/install.sh | bash ``` 2. **Login to Turso:** ```bash turso auth login ``` 3. **Create an auth token:** ```bash turso auth token create --name "mcp-libsql" ``` 4. **Get your database URL:** ```bash turso db show your-database-name --url ``` #### **Security Best Practices** - **Environment variables are safer** than CLI parameters (tokens won't appear in process lists) - **MCP config files may contain tokens** - ensure they're not committed to version control - **Consider using external secret management** for production environments - **Use scoped tokens** with minimal required permissions - **Rotate tokens regularly** for enhanced security - **Monitor token usage** through Turso dashboard #### **Example: Complete Turso Setup** 1. **Create and configure database:** ```bash # Create database turso db create my-app-db # Get database URL turso db show my-app-db --url # Output: libsql://my-app-db-username.turso.io # Create auth token turso auth token create --name "mcp-libsql-token" # Output: your-long-auth-token-string ``` 2. **Configure Claude Desktop:** ```bash export LIBSQL_AUTH_TOKEN="your-turso-auth-token-here" ``` ```json { "mcpServers": { "mcp-libsql": { "command": "mcp-libsql", "args": [ "--url", "libsql://my-app-db-username.turso.io" ] } } } ``` 3. **Test the connection:** ```bash # Test locally first mcp-libsql --url "libsql://my-app-db-username.turso.io" --log-mode console ``` #### **Configuration Notes** - **File paths**: Use absolute paths to avoid path resolution issues - **Database URLs**: - File databases: `file:///absolute/path/to/database.db` - HTTP databases: `http://hostname:port` - libSQL/Turso: `libsql://your-database.turso.io` - **Node.js path**: Use `which node` to find your Node.js installation path - **Working directory**: Set `cwd` to ensure relative paths work correctly - **Authentication**: For Turso databases, use environment variables for secure token handling - **Logging modes**: - Default `file` mode prevents JSON parsing errors in MCP protocol - Use `--log-mode console` for development debugging - Use `--log-mode both` for comprehensive logging - Use `--log-mode none` to disable all logging 2. **Restart Claude Desktop** completely after updating the configuration 3. **Test the integration** by asking Claude to run SQL queries: ``` Can you run this SQL query: SELECT 1 as test ``` ## 📋 **Available Tools** - **read-query** - Execute SELECT queries with security validation - **write-query** - INSERT/UPDATE/DELETE with transaction support - **create-table** - CREATE TABLE with DDL security - **alter-table** - Modify table structure (ADD/RENAME/DROP) - **list-tables** - Browse database metadata and objects - **describe-table** - Inspect table schema and structure > 📖 **Detailed API documentation:** See [docs/API.md](docs/API.md) for complete input/output examples and parameters. ## 🧪 **Testing** ```bash # Run all tests pnpm test # Run tests in watch mode pnpm test:watch # Run tests with coverage pnpm test:coverage # Run specific test file pnpm test security-verification # Lint code pnpm lint # Fix linting issues pnpm lint:fix # Type check pnpm typecheck ``` **Test Coverage**: 403 tests covering all functionality including edge cases, error scenarios, CLI arguments, authentication, and comprehensive security validation. ## ⚠️ **Common Issues** ### **1. Build Failures** ```bash # Clean and rebuild rm -rf dist node_modules pnpm install && pnpm build ``` ### **2. Node.js Version Issues (macOS)** ``` SyntaxError: Unexpected token '??=' ``` **Problem**: Claude Desktop may default to using an older Node.js version on your system which doesn't support the required feature set. **Solution**: Use global installation and nvm node selection method shown above. ### **3. Server Won't Start** - For global installation: `pnpm install -g @xexr/mcp-libsql` - For local installation: Ensure `pnpm build` was run and `dist/index.js` exists - Test locally: `mcp-libsql --url file:///tmp/test.db` - Restart Claude Desktop after config changes ### **4. Tools Not Available** - Verify database URL is accessible - Check Claude Desktop logs for connection errors - Test with simple file database: `file:///tmp/test.db` ### **5. JSON Parsing Errors (Resolved)** ``` Expected ',' or ']' after array element in JSON ``` **Resolved**: This issue is caused by stdout console logging. The `--log-mode` option now defaults to `file` mode which prevents this issue. If you see these errors, ensure you're using the default `--log-mode file` or not specifying `--log-mode` at all. Note, the error is harmless, and the tool will still work with it if you wish to have console logging. ### **6. Database Connection Issues** ```bash # Test database connectivity sqlite3 /tmp/test.db "SELECT 1" # Fix permissions chmod 644 /path/to/database.db ``` > 🔧 **Full troubleshooting guide:** See [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) for detailed solutions to all issues. ## 🏗️ **Architecture** Built with TypeScript and modern Node.js patterns: - **Connection pooling** with health monitoring and retry logic - **Tool-based architecture** with consistent validation and error handling - **Security-first design** with multi-layer input validation - **Comprehensive testing** with 244 tests covering all scenarios ## 🤝 **Contributing** 1. Follow TypeScript strict mode and existing code patterns 2. Write tests for new features 3. Maintain security measures 4. Update documentation **Development:** `pnpm dev` • **Build:** `pnpm build` • **Test:** `pnpm test` ## 📄 **License** MIT License - see [LICENSE](LICENSE) file for details. ## 🔗 **Links** - [Model Context Protocol](https://modelcontextprotocol.io/) - [MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk) - [libSQL Documentation](https://docs.libsql.org/) - [Claude Desktop](https://claude.ai/desktop)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Xexr/mcp-libsql'

If you have feedback or need assistance with the MCP directory API, please join our Discord server