---
title: "MCP MariaDB Server: review, setup & limitations · Undominated.ai"
canonical: https://undominated.ai/mcp-servers/mariadb/
description: "Python MCP server from the MariaDB organisation that lists databases and schemas, runs statements through a default read-only gate, and can register vector-store tools when an embedding provider is set."
---

# MCP MariaDB Server: review, setup & limitations · Undominated.ai

> Python MCP server from the MariaDB organisation that lists databases and schemas, runs statements through a default read-only gate, and can register vector-store tools when an embedding provider is set.

[← Explore all mcp servers](/mcp-servers/)

DATABASE DEVELOPMENT / MariaDB

# MCP MariaDB Server

Python MCP server from the MariaDB organisation that lists databases and schemas, runs statements through a default read-only gate, and can register vector-store tools when an embedding provider is set.

 [See setup guidance ↓](#setup)[Original source ↗](https://github.com/MariaDB/mcp)

SOURCE REVIEW

 Reviewed 2026-10-15
 Evidence 5 linked sources
 Publisher MariaDB
 Licence [MIT ↗](https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/LICENSE)
 Revision 64876fb1a4cb
 [Read what was—and wasn’t—checked ↓](#review)

“The MCP MariaDB Server provides a Model Context Protocol (MCP) interface for managing and querying MariaDB databases, supporting both standard SQL operations and advanced vector/embedding-based search.”

 [MariaDB · upstream description ↗](https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/README.md) Our analysis follows below.

01 / THE REASONING

## Why this made the selection.

 - MariaDB publishes this server in MariaDB/mcp. At 64876fb1a4cb81bf51564c46eb60401097c067cc, pyproject.toml names the package mariadb-server version 0.2.6, requires Python >=3.11, and describes it as MariaDB MCP Server. The LICENSE file is the MIT License and its copyright line is Copyright (c) 2025 MariaDB.
- The README lists list_databases, list_tables, get_table_schema, get_table_schema_with_relations, execute_sql, and create_database, plus optional vector-store tools. src/server.py defines methods with those names.

### A good fit for

 - List MariaDB databases and table schemas, then run a statement whose normalised text starts with SELECT, SHOW, DESC, DESCRIBE, or USE.
- Register the optional vector-store tools after EMBEDDING_PROVIDER is set to openai, gemini, or huggingface.

### Weigh up before choosing

 - The default-branch commit read here, 64876fb1a4cb81bf51564c46eb60401097c067cc, is dated 2026-08-10.
- The README run lines say uv run server.py. This tree has src/server.py and no server.py at the repository root. The Docker client example passes src/server.py.
- MCP_READ_ONLY defaults to true in the README table and in src/config.py. create_database sends CREATE DATABASE IF NOT EXISTS, which is outside the prefix tuple SELECT, SHOW, DESC, DESCRIBE, USE, so the default read-only branch raises PermissionError. The README still lists create_database as a tool.
- In that same read-only branch, LOAD_FILE() and SELECT INTO OUTFILE or DUMPFILE also raise PermissionError. MCP_BLOCK_SENSITIVE_SHOW defaults to true and is independent of the read-only flag.
- DB_SSL defaults to false. DB_SSL_VERIFY_CERT defaults to true. DB_SSL_VERIFY_IDENTITY defaults to false. The README says http and sse have no default authentication method.
- The stdio client example uses the placeholder paths path/to/mariadb-mcp-server/ and server.py, plus envFile path/to/mcp-server-mariadb-vector/.env. The Docker example sets --host 0.0.0.0, publishes port 9001, and also passes --transport stdio.
- pip install uv is printed as a setup step and does not pin a server build. Vector tools are absent unless EMBEDDING_PROVIDER is set.

02 / THE REVIEW RECORD

## What we actually inspected.

Source review has boundaries. A clear record is more useful than a “safe” badge.

### Material inspected

 - README.md at 64876fb1a4cb81bf51564c46eb60401097c067cc: opening sentence, tool list, environment table, run commands, stdio and Docker JSON.
- LICENSE at the same revision: MIT License, Copyright (c) 2025 MariaDB.
- pyproject.toml at the same revision: name mariadb-server, version 0.2.6, requires-python >=3.11. No project.scripts table.
- src/config.py at the same revision: MCP_READ_ONLY and MCP_BLOCK_SENSITIVE_SHOW default to the string true.
- src/server.py at the same revision: allowed statement prefixes, the read-only PermissionError, create_database SQL, and the stdio, sse, and http branches in run_async_server.

### Our findings

 - The README bullet for execute_sql names SELECT, SHOW, and DESCRIBE. The code prefix tuple also includes DESC and USE, and rejects every other prefix while MCP_READ_ONLY is true.
- create_database is registered and builds CREATE DATABASE IF NOT EXISTS. That statement does not pass the default prefix gate.
- The stdio JSON and the root-level uv run server.py line do not match the path src/server.py that is in the tree. The Docker JSON does use src/server.py.
- The HTTP client example sets type to streamable-http. The server run line for that mode passes --transport http.

### Not established by this review

 - Not executed: it was not installed or run.
- No MariaDB connection was opened and no embedding provider was called.

The review applies to the material and revision named here. A newer upstream release can change its behavior.

03 / PUT IT TO WORK

## Connect a server deliberately.

[Upstream setup instructions ↗](https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/README.md)
 - The README says to clone the repository, install uv, run uv lock and uv sync, create a .env file, and start the process. Those commands are in separate fenced blocks, so none is copied into install.command.
- The printed stdio line is uv run server.py. The file in this tree is src/server.py.
- Set DB_HOST, DB_USER, and DB_PASSWORD. Leave MCP_READ_ONLY unset to keep the default true.

### Before you start

 - Python 3.11 and uv.
- A MariaDB server and a database user.

### Documented configuration example

Use the client and authentication context described in the setup guidance. Configuration formats vary between hosts.

 {
 "mcpServers": {
 "MariaDB_Server": {
 "command": "uv",
 "args": [
 "--directory",
 "path/to/mariadb-mcp-server/",
 "run",
 "server.py"
 ],
 "envFile": "path/to/mcp-server-mariadb-vector/.env"
 }
 }
} Copy configuration ↗

### Compatibility

Python 3.11, as the README requirements and pyproject.toml state. · uv, as the README requires. · A MariaDB server, local or remote, as the README states. · Clients named in the README integration heading: Claude desktop, Cursor, Windsurf, and VSCode.

### Implementation

Python

### Transports

stdio · sse · http

### MariaDB user and password

 - DB_HOST, DB_USER, and DB_PASSWORD are required environment variables. DB_PASSWORD is the database password.
- With the default read-only gate, statement text is allowed only when it starts with SELECT, SHOW, DESC, DESCRIBE, or USE. Other prefixes raise PermissionError.
- create_database issues CREATE DATABASE. Vector tools, when EMBEDDING_PROVIDER is set, create and delete tables and insert documents. Optional keys named in the README are OPENAI_API_KEY and GEMINI_API_KEY.
- The README says the server does not provide a default authentication method for http or sse.

### Cost model

MIT. The files read here do not state a fee for this server, for MariaDB, or for an embedding provider.

04 / FOLLOW THE EVIDENCE

## The source trail.

Our notes are separate from the original resource. Check upstream before adopting a new version.

 - [MCP MariaDB Server README at 64876fb1 ↗](https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/README.md) Checked 2026-10-15 https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/README.md Supports: upstreamDescription, install, configExample, transports, bestFor, limitations, access
- [MIT License at 64876fb1 ↗](https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/LICENSE) Checked 2026-10-15 https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/LICENSE Supports: license
- [pyproject.toml at 64876fb1 ↗](https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/pyproject.toml) Checked 2026-10-15 https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/pyproject.toml Supports: language, compatibility, whySelected
- [src/server.py at 64876fb1 ↗](https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/src/server.py) Checked 2026-10-15 https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/src/server.py Supports: limitations, access, review.findings
- [src/config.py at 64876fb1 ↗](https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/src/config.py) Checked 2026-10-15 https://github.com/MariaDB/mcp/blob/64876fb1a4cb81bf51564c46eb60401097c067cc/src/config.py Supports: limitations, access

KEEP COMPARING

## Other approaches to consider.

Related by category or shared topics. These are alternatives to inspect, not a measured quality order.

 [### YDB MCP ↗ Python MCP server from the ydb-platform organisation that runs YDB SQL, explains queries, and lists or describes paths, with writes off unless a flag or environment variable turns them on.](/mcp-servers/ydb/)[### YugabyteDB MCP Server ↗ Python MCP server from the Yugabyte organisation that lists schema objects, runs a SELECT inside a read-only transaction, and keeps the write tool off unless an operator flag turns it on.](/mcp-servers/yugabytedb/)[### Aurora DSQL MCP ↗ AWS Labs MCP server that turns questions into Postgres-compatible SQL for Aurora DSQL, read-only unless --allow-writes is passed, and only on the same host as the client.](/mcp-servers/awslabs-aurora-dsql/)

 [AI Tools ↗](/tools/)[Skills ↗](/skills/)[Agents ↗](/agents/)[MCP Servers ↗](/mcp-servers/)[Workflows ↗](/workflows/)

## Continue your investigation

 - [Inspect resource evidence](/tools/)
- [Choose a host](/agents/)
- [Inspect reusable workflows](/skills/)
- [Use Undominated data](/api/)
