Skip to main content
Glama
guillaume-galp

dremio-mcp-lite

README.md
# dremio-mcp-lite

A TypeScript MCP (Model Context Protocol) server for Dremio data exploration. This tool enables AI assistants to interact with Dremio through a set of read-only operations.

## Features

- **Fast Startup**: Optimized for <1s startup time for VS Code stdio MCP
- **Read-Only Operations**: Safe exploration of your Dremio data catalog
- **6 Core Tools**:
  - `catalog_browse`: List sources, spaces, folders, and tables
  - `schema_get`: Get table schemas
  - `sql_query`: Execute SELECT queries (max 1000 rows)
  - `table_preview`: Preview first 10 rows of a table
  - `search_catalog`: Find tables by name
  - `explain_query`: Get query execution plans

## Installation

```bash
npm install @guillaume-galp/dremio-mcp-lite
```

## Configuration

Create a `.env` file in your project root:

```bash
DREMIO_URL=http://localhost:9047
DREMIO_PAT=your_personal_access_token_here

# SSL Configuration (optional)
# Set to 'false' to disable SSL certificate verification for self-signed certificates
# WARNING: Only use in development/testing environments
DREMIO_REJECT_UNAUTHORIZED=true
```

Or copy from the example:

```bash
cp .env.example .env
```

### SSL Certificate Configuration

When connecting to Dremio instances with self-signed SSL certificates (common in internal/corporate environments), you may encounter certificate verification errors. To disable SSL certificate verification:

1. Set `DREMIO_REJECT_UNAUTHORIZED=false` in your `.env` file
2. **Important**: Only use this setting in development or testing environments
3. **Never** disable certificate verification in production environments

Example for self-signed certificates:
```bash
DREMIO_URL=https://dremio.internal.company.com:9047
DREMIO_PAT=your_personal_access_token_here
DREMIO_REJECT_UNAUTHORIZED=false
```

### Getting a Dremio Personal Access Token

1. Log in to your Dremio instance
2. Go to Settings → Personal Access Tokens
3. Click "Create Token"
4. Copy the token and add it to your `.env` file

## Usage

### As an MCP Server

Add to your MCP client configuration (e.g., VS Code `mcp.json`):

```json
{
  "mcpServers": {
    "dremio": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@guillaume-galp/dremio-mcp-lite"
      ],
      "envFile": "${userHome}/.dremio-mcp.env",
      "gallery": true
    }
  }
}
```

**Configuration Notes:**
- `type`: Must be `"stdio"` for standard input/output communication
- `-y`: Auto-confirms npx package installation
- `envFile`: Path to your environment file containing `DREMIO_URL` and `DREMIO_PAT`
  - Recommended: Use `${userHome}` variable: `"${userHome}/.dremio-mcp.env"`
  - Windows absolute path: `"C:\\Users\\<YourUsername>\\.dremio-mcp.env"`
  - macOS/Linux absolute path: `"/Users/<YourUsername>/.dremio-mcp.env"` or `"/home/<YourUsername>/.dremio-mcp.env"`
  - Replace `<YourUsername>` with your actual username
- `gallery`: Optional, set to `true` to show in MCP gallery

Or if installed globally:

```json
{
  "mcpServers": {
    "dremio": {
      "type": "stdio",
      "command": "dremio-mcp-lite",
      "envFile": "${userHome}/.dremio-mcp.env",
      "gallery": true
    }
  }
}
```

### Available Tools

#### catalog_browse
Browse the Dremio catalog structure.

```typescript
// List all sources
catalog_browse()

// Browse a specific path
catalog_browse({ path: ["source_name", "folder"] })
```

#### schema_get
Get the schema definition of a table.

```typescript
schema_get({ table_path: ["source", "schema", "table"] })
```

#### sql_query
Execute SELECT queries (read-only).

```typescript
sql_query({
  sql: "SELECT * FROM source.schema.table WHERE id > 100",
  max_rows: 500  // Optional, default 1000
})
```

#### table_preview
Quick preview of table data (first 10 rows).

```typescript
table_preview({ table_path: ["source", "schema", "table"] })
```

#### search_catalog
Search for tables and datasets by name.

```typescript
search_catalog({ search_term: "customer" })
```

#### explain_query
Get the execution plan for a query.

```typescript
explain_query({ sql: "SELECT * FROM source.schema.table" })
```

## Security

This MCP server implements several security measures:

- **Read-Only Operations**: Only SELECT queries are allowed. All modifications (INSERT, UPDATE, DELETE, etc.) are blocked.
- **SQL Injection Protection**: Table paths are properly escaped using SQL identifier quoting to prevent injection attacks.
- **Query Validation**: SQL queries are validated to ensure they are SELECT statements, even when prefixed with comments or whitespace.
- **Personal Access Tokens**: Uses Dremio PAT authentication stored securely in .env file (never commit .env to version control).

## Development

### Build

```bash
npm run build
```

### Run Locally

```bash
npm start
```

### Publishing to npm

The package is automatically published to npm when a version tag is pushed:

1. Update the version in `package.json`:
   ```bash
   npm version patch  # or minor, or major
   ```

2. Push the tag to GitHub:
   ```bash
   git push origin master --tags
   ```

   Or if using the main branch:
   ```bash
   git push origin main --tags
   ```

3. The GitHub Actions workflow will automatically build and publish to npm

**Prerequisites:**
- `NPM_TOKEN` must be configured in GitHub repository secrets
- The token must have publish access to the `@guillaume-galp` scope on npmjs.org

## Requirements

- Node.js >= 18
- Access to a Dremio instance (default port: 9047)
- Valid Dremio Personal Access Token

## License

MIT

TDQS

A3.6/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a clearly distinct operation: catalog browsing, schema retrieval, arbitrary SQL, quick preview, catalog search, and query explanation. The only potentially overlapping pair is catalog_browse and search_catalog, but one navigates the hierarchy while the other searches by name, so they are easy to distinguish.

Naming Consistency3/5

The naming is readable and consistently uses snake_case, but the verb placement is mixed: object-verb forms like catalog_browse, schema_get, and table_preview sit alongside verb-object forms like search_catalog and explain_query, and sql_query has no verb at all. This is not chaotic, but it does not follow a single predictable pattern.

Tool Count5/5

Six tools is well-scoped for a read-only Dremio exploration and querying server. Each tool serves a distinct purpose without redundancy, and the count is comfortably within the ideal range.

Completeness5/5

The tool set covers the full read-only workflow: discovering data via browse/search, inspecting structure via schema, peeking at data via preview, running arbitrary queries, and understanding performance via explain. No obvious dead ends or missing essential operations exist for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues