Skip to main content
Glama
sam2332

SQLite MCP Server

by sam2332
README.md
# SQLite MCP Server

A Model Context Protocol (MCP) server that provides tools for querying SQLite databases. This server allows AI assistants to interact with SQLite databases by listing tables, describing schemas, and executing queries.

## Features

- **Connect to SQLite databases**: Connect to any SQLite database file
- **List tables**: Get all table names in the database  
- **Describe table schemas**: View column definitions, types, and constraints
- **Query data**: Execute SELECT queries with automatic result formatting
- **Execute queries**: Run INSERT, UPDATE, DELETE and other SQL operations
- **Get comprehensive table info**: View schema, indexes, row counts, and sample data

## Installation

```bash
npm install
npm run build
```

## Usage

### As an MCP Server

Add to your MCP client configuration:

```json
{
  "mcpServers": {
    "sqlite": {
      "command": "node",
      "args": ["path/to/dist/index.js"],
      "env": {}
    }
  }
}
```

### Available Tools

1. **connect_database** - Connect to a SQLite database file
   - `path`: Path to the SQLite database file
   - `readonly`: Optional boolean to open in read-only mode

2. **list_tables** - List all tables in the connected database

3. **describe_table** - Get the schema/structure of a specific table
   - `table_name`: Name of the table to describe

4. **query_data** - Execute a SELECT query on the database
   - `query`: SQL SELECT query to execute
   - `limit`: Optional maximum number of rows to return (default: 100)

5. **execute_query** - Execute any SQL query (INSERT, UPDATE, DELETE, etc.)
   - `query`: SQL query to execute

6. **get_table_info** - Get comprehensive information about a table
   - `table_name`: Name of the table to analyze
   - `sample_rows`: Optional number of sample rows to return (default: 5)

## Example Usage

1. First connect to a database:
   ```
   Tool: connect_database
   Args: {"path": "./sample.db"}
   ```

2. List all tables:
   ```
   Tool: list_tables
   ```

3. Get detailed information about a table:
   ```
   Tool: get_table_info
   Args: {"table_name": "users", "sample_rows": 3}
   ```

4. Query data:
   ```
   Tool: query_data
   Args: {"query": "SELECT * FROM users WHERE active = 1", "limit": 10}
   ```

## Development

```bash
# Build TypeScript
npm run build

# Watch for changes during development
npm run dev

# Start the server
npm start
```

## Requirements

- Node.js 18 or higher
- SQLite database files

## Security Notes

- The server can execute any SQL query, so ensure proper access controls
- Consider using read-only mode for sensitive databases
- SQL injection protection is the responsibility of the query author

TDQS

B3.2/5.0

Scored across 6 tools

Disambiguation2/5

Multiple tools have overlapping purposes that could cause confusion. For example, 'describe_table' and 'get_table_info' both seem to provide table schema information, and 'execute_query' and 'query_data' both handle SQL queries with unclear boundaries (e.g., whether SELECT queries should use 'execute_query' or 'query_data'). This overlap makes it difficult for an agent to reliably choose the right tool.

Naming Consistency4/5

The tool names follow a consistent verb_noun pattern throughout (e.g., connect_database, describe_table, execute_query), which is predictable and readable. There are no deviations in naming conventions, though the verbs could be more precise to reduce ambiguity.

Tool Count5/5

With 6 tools, the server is well-scoped for interacting with SQLite databases. This count covers essential operations like connecting, listing tables, describing schemas, and executing queries, without being overly complex or too sparse. Each tool appears to earn its place in the set.

Completeness4/5

The tool set covers core database operations such as connection, table listing, schema inspection, and query execution, which are sufficient for most SQLite workflows. However, there is a minor gap in not having explicit tools for database management tasks like creating or dropping tables, though these could be handled via 'execute_query'. This does not significantly hinder agent functionality.

Maintenance

ActivityInactive
ResponsivenessNo issues