Skip to main content
Glama
cemalturkcan

MariaDB MCP Server

by cemalturkcan
README.md
# mariadb-mcp-server

MCP (Model Context Protocol) server for MariaDB/MySQL databases. Provides AI assistants with safe, controlled database access through per-connection read/write permissions.

## Features

- **Multi-connection** — manage multiple MariaDB/MySQL databases from a single server
- **Per-connection access control** — `read` and `write` flags per connection
- **Optional limits** — `statement_timeout_ms`, `default_row_limit`, `max_row_limit` (all optional, unlimited by default)
- **SQL guard** — validates queries to prevent accidental writes through read tools
- **Transaction support** — atomic multi-query execution on writable connections

## Installation

```bash
npm install -g @cemalturkcann/mariadb-mcp-server
```

Or use directly with npx:

```bash
npx @cemalturkcann/mariadb-mcp-server
```

## Configuration

The server looks for `config.json` in this order:

1. `DB_MCP_CONFIG_PATH` environment variable
2. Next to the package (`../config.json` relative to `src/`)
3. Current working directory
4. `~/.config/mariadb-mcp/config.json`

If no config is found, a default one is created automatically at `~/.config/mariadb-mcp/config.json` with a local read-only connection.

Example config:

```json
{
  "connections": {
    "local": {
      "host": "localhost",
      "port": 3306,
      "user": "root",
      "password": "",
      "description": "Local MariaDB",
      "read": true,
      "write": true
    },
    "production": {
      "host": "db.example.com",
      "port": 3306,
      "user": "readonly_user",
      "password": "secret",
      "database": "mydb",
      "description": "Production (read-only)",
      "read": true,
      "write": false,
      "statement_timeout_ms": 5000,
      "default_row_limit": 50,
      "max_row_limit": 500
    }
  }
}
```

### Connection options

| Field                  | Type           | Default     | Description                                      |
| ---------------------- | -------------- | ----------- | ------------------------------------------------ |
| `host`                 | string         | `localhost` | Database host                                    |
| `port`                 | number         | `3306`      | Database port                                    |
| `user`                 | string         | `root`      | Database user                                    |
| `password`             | string         | `""`        | Database password                                |
| `database`             | string         | `""`        | Default database                                 |
| `description`          | string         | `""`        | Human-readable label                             |
| `read`                 | boolean        | `true`      | Allow read queries                               |
| `write`                | boolean        | `false`     | Allow write queries                              |
| `ssl`                  | boolean/object | `false`     | SSL configuration                                |
| `statement_timeout_ms` | number         | _none_      | Connection timeout (0 or omit = unlimited)       |
| `default_row_limit`    | number         | _none_      | Default LIMIT for SELECT (0 or omit = unlimited) |
| `max_row_limit`        | number         | _none_      | Max allowed LIMIT (0 or omit = unlimited)        |

## MCP Tools

| Tool                  | Description                                     | Requires |
| --------------------- | ----------------------------------------------- | -------- |
| `list_connections`    | List all configured connections                 | —        |
| `list_databases`      | Show databases on a connection                  | `read`   |
| `list_tables`         | Show tables (optionally in a specific database) | `read`   |
| `describe_table`      | Show column definitions                         | `read`   |
| `execute_select`      | Run SELECT / SHOW / DESCRIBE / EXPLAIN queries  | `read`   |
| `execute_write`       | Run INSERT / UPDATE / DELETE / DDL queries      | `write`  |
| `execute_transaction` | Run multiple write queries atomically           | `write`  |
| `suggest_query`       | Suggest a query for manual review               | —        |

## MCP Client Setup

On first run, a default config is created automatically at `~/.config/mariadb-mcp/config.json` (Linux/macOS) or `%APPDATA%\mariadb-mcp\config.json` (Windows). Edit it to add your connections.

### Claude Code

Add to `~/.claude.json`:

```json
{
  "mcpServers": {
    "mariadb": {
      "command": "npx",
      "args": ["-y", "@cemalturkcann/mariadb-mcp-server"]
    }
  }
}
```

### OpenCode

Add to your `opencode.json`:

```json
{
  "mcp": {
    "mariadb": {
      "type": "local",
      "command": ["npx", "-y", "@cemalturkcann/mariadb-mcp-server"]
    }
  }
}
```

### Other MCP Clients

Any MCP-compatible client can use this server. The binary name is `mariadb-mcp-server` and it communicates over stdio. To use a custom config path, set `DB_MCP_CONFIG_PATH`.

## License

MIT

TDQS

B3.3/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a distinct purpose: describing tables, executing SELECT queries, listing connections, databases, tables, and suggesting queries. No overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., describe_table, list_databases).

Tool Count5/5

6 tools is well-scoped for a MariaDB server, covering metadata listing, query execution, and query suggestion without being excessive or thin.

Completeness4/5

Covers read-only operations (SELECT, DESCRIBE, metadata listing) and query suggestion, but lacks write operations (INSERT/UPDATE/DELETE) and DDL commands. This gap appears intentional but limits the surface.

Maintenance

ActivityInactive
ResponsivenessNo issues