Content
# MariaDB / MySQL MCP Server
This MCP server exposes MariaDB and MySQL databases to MCP clients such as Claude Desktop, VS Code, and other compatible tools.
It provides tools to:
- list available databases
- list tables in a database
- describe table schemas
- execute SQL queries
## Features
- Safe-by-default behavior: read-only access is enabled by default
- Query validation to block disallowed statements and reduce injection risk
- Configurable write permissions through environment variables
- Timeout and row-limit protection
- Numeric safety for insert IDs and BIGINT values returned by the MariaDB driver
## Installation
### Option 1: Install from npm
```bash
npm install -g mariadb-mcp-server
```
### Option 2: Install locally
```bash
npm install mariadb-mcp-server
```
### Option 3: Build from source
```bash
git clone https://github.com/rjsalgado/mariadb-mcp-server.git
cd mariadb-mcp-server
npm install
npm run build
```
## Configuration
Set the following environment variables before starting the server:
- `MARIADB_HOST`: Database host
- `MARIADB_PORT`: Database port (default: `3306`)
- `MARIADB_USER`: Database username
- `MARIADB_PASSWORD`: Database password
- `MARIADB_DATABASE`: Default database name (optional)
- `MARIADB_ALLOW_INSERT`: Enable `INSERT` statements (`true`/`false`)
- `MARIADB_ALLOW_UPDATE`: Enable `UPDATE` statements (`true`/`false`)
- `MARIADB_ALLOW_DELETE`: Enable `DELETE` statements (`true`/`false`)
- `MARIADB_TIMEOUT_MS`: Query timeout in milliseconds (default: `10000`)
- `MARIADB_ROW_LIMIT`: Maximum number of rows returned (default: `1000`)
Example:
```bash
export MARIADB_HOST=localhost
export MARIADB_PORT=3306
export MARIADB_USER=myuser
export MARIADB_PASSWORD=mypassword
export MARIADB_DATABASE=mydb
export MARIADB_ALLOW_INSERT=false
export MARIADB_ALLOW_UPDATE=false
export MARIADB_ALLOW_DELETE=false
export MARIADB_TIMEOUT_MS=10000
export MARIADB_ROW_LIMIT=1000
```
## MCP configuration
### Using npm package
```json
{
"mcpServers": {
"mariadb": {
"command": "npx",
"args": ["mariadb-mcp-server"],
"env": {
"MARIADB_HOST": "your-host",
"MARIADB_PORT": "3306",
"MARIADB_USER": "your-user",
"MARIADB_PASSWORD": "your-password",
"MARIADB_DATABASE": "your-database",
"MARIADB_ALLOW_INSERT": "false",
"MARIADB_ALLOW_UPDATE": "false",
"MARIADB_ALLOW_DELETE": "false",
"MARIADB_TIMEOUT_MS": "10000",
"MARIADB_ROW_LIMIT": "1000"
},
"disabled": false,
"autoApprove": []
}
}
}
```
### Using a built local server
```json
{
"mcpServers": {
"mariadb": {
"command": "node",
"args": ["/absolute/path/to/mariadb-mcp-server/dist/index.js"],
"env": {
"MARIADB_HOST": "your-host",
"MARIADB_PORT": "3306",
"MARIADB_USER": "your-user",
"MARIADB_PASSWORD": "your-password",
"MARIADB_DATABASE": "your-database",
"MARIADB_ALLOW_INSERT": "false",
"MARIADB_ALLOW_UPDATE": "false",
"MARIADB_ALLOW_DELETE": "false",
"MARIADB_TIMEOUT_MS": "10000",
"MARIADB_ROW_LIMIT": "1000"
},
"disabled": false,
"autoApprove": []
}
}
}
```
## Available tools
The server registers the following MCP tools:
### `list_databases`
Lists all databases accessible to the configured user.
### `list_tables`
Lists tables from a specific database.
Parameters:
- `database` (optional): database name to inspect
### `describe_table`
Returns the schema of a specific table.
Parameters:
- `database` (optional): database name
- `table` (required): table name
### `execute_query`
Executes a SQL query.
Parameters:
- `database` (optional): database name
- `query` (required): SQL statement to run
## Testing
The repository includes scripts to validate the server against a MariaDB or MySQL instance.
```bash
npm run test:setup
npm run test:tools
```
Or run everything together:
```bash
npm test
```
## Notes
- The server is safe-by-default and only allows read-only operations unless the write flags are explicitly enabled.
- Write operations are still subject to query validation and runtime limits.
## Troubleshooting
If you encounter issues:
1. Check the server logs for error messages
2. Verify your MariaDB/MySQL credentials and connection details
3. Ensure your MariaDB/MySQL user has appropriate permissions
4. Check that your query is read-only and properly formatted
**Inspiration**
**https://github.com/dpflucas/mysql-mcp-server**
## License
This project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details.