Documentation · MariaDB
Release notes for MariaDB
The MariaDB image is published to the GitHub Container Registry and Docker Hub:
docker pull ghcr.io/srmadscience/mcpdbwizard-mariadb:2.0.36
docker pull docker.io/srmadscience/mcpdbwizard-mariadb:2.0.36
Both hold the same image, linux/amd64 and linux/arm64. Pin the version tag in anything that
matters: latest moves, and docker run never refreshes an image the machine already has. Each
release is also a GitHub Release
carrying the same notes.
The MariaDB, Postgres and Oracle products share version numbers but not every release: a version appears here only if a MariaDB image was published for it. The Oracle notes are in Release notes, and the Postgres notes in Release notes for Postgres.
2.0.36 — 12 November 2026
The first release of MCPDBWizard for MariaDB.
docker pull ghcr.io/srmadscience/mcpdbwizard-mariadb:2.0.36
docker pull docker.io/srmadscience/mcpdbwizard-mariadb:2.0.36
MCPDBWizard for MariaDB generates MCP servers from a MariaDB schema, as the Oracle and Postgres products do from theirs: you select what to expose, and an agent reaches the database only through typed tools for exactly that. See MCPDBWizard for MariaDB.
What it exposes
- Stored procedures and functions, including members of Oracle-mode packages, with
IN,OUTandINOUTparameters,ROWparameters as records, and a procedure’s result sets. Cursor outputs need MariaDB 12.3 or later. - Tables: get by primary key, unique-key and index lookups, foreign-key children, and row inserts, updates and deletes where you allow them. New tables are read-only by default.
- Sequences (
NEXTVAL). - Your own SQL statements, each one a tool. MariaDB does not report a parameter’s type, so a
hint names it:
where id = ? /* pId int */.
Each tool call runs in its own transaction, committed when the call succeeds and rolled back when it fails, so a call that fails half way leaves nothing behind.
How values cross
Geometry as EWKT (SRID=4326;POINT(1 2)), VECTOR as an array of numbers, JSON as its text,
BOOLEAN as a number, binary as base64. MariaDB has no object, collection, INTERVAL or
time-zone types, so neither does this product.
Context Pinning
A URL parameter on the MCP endpoint (?CUSTOMER_NAME=...) reaches the database as a user variable
(@mcp_customer_name), so a routine can restrict what it returns to one customer. It is cleared and
set again at the start of every call, so one caller’s value never reaches the next, although pooled
calls share sessions. Nothing needs installing in the database.
Supported versions
MariaDB 11.4, 11.8, 12.3 and 13.x. 10.11 is not supported: a login that did not create a routine cannot read its source there.
Before you start
Grant the login SELECT, EXECUTE and SHOW CREATE ROUTINE on each database it reads, and
INSERT as well on each sequence it exposes. Without SHOW CREATE ROUTINE, routines with ROW
parameters cannot be described. See Connecting to MariaDB.
Not available on MariaDB
The SOAP service layer and the JSON / JSON-RPC external connectors are Oracle-only. The MCP server is how a MariaDB schema is reached.
Known issues
jsoncrosses as JSON text, a string holding the document, where Oracle’s native JSON crosses as an object. An agent must parse it, and must send a string back.BOOLEANcrosses as a number, because MariaDB stores it as atinyint.- Package state is per session, not per caller. A package’s variables and its initialisation section belong to the pooled connection, so callers that the same connection serves share them. Context Pinning’s own variables are cleared every call; a routine’s own user variables are not.
- A
COMMITinside a procedure, or DDL, commits the call’s work so far, so a later failure in the same call cannot roll it back. - A parameter’s default is not applied. Every parameter is a required argument.
- A cursor output’s column types are known only for a
SELECT *over one table. Otherwise a column crosses as text, or as base64 when its bytes are not valid UTF-8, and a column without an alias is namedcol1,col2, … - A
VECTORin a procedure’s own result set, a positional cursor or an expression column crosses as base64 bytes, because nothing reports its type there. As a parameter, a result or a table column it is an array of numbers. - A statement timeout does not stop a
SLEEP()orBENCHMARK()inside a routine: they return early and the routine carries on, so a routine that only sleeps reports success at the limit.
For what is not supported at all, see MCPDBWizard for MariaDB.