MariaDB MCP服务器(Go)
MariaDB的模型上下文协议(MCP)服务器,用Go编写。该服务器提供对MariaDB数据库的安全访问,支持向量存储和语义搜索。
特性
- 11 MCP工具:完成数据库和矢量存储操作
- 安全第一:默认情况下禁用MULTI_STATENTS以防止SQL注入
- 多个传输:stdio、SSE和HTTP支持
- 矢量存储:原生支持MariaDB的VECTOR类型和索引
- 嵌入提供者:OpenAI和谷歌Gemini支持
- 只读模式:只读查询的可选强制执行
安装
源自源头
go install github.com/rahadiangg/mcp-mariadb/cmd/mcp-mariadb@latest使用Docker
docker pull ghcr.io/rahadiangg/mcp-mariadb:latest配置
配置是通过环境变量完成的(所有变量都以前缀 MCP_MARIADB_):
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
HOST | 否 | localhost | 数据库主机 |
PORT | 否 | 3306 | 数据库端口 |
USER | 是 | - | 数据库用户 |
PASSWORD | 是 | - | 数据库密码 |
DATABASE | 否 | - | 默认数据库 |
CHARSET | 否 | - | 连接字符集 |
SSL | 否 | 错误 | 启用SSL |
SSL_CA | 无 | - | SSL CA证书路径 |
SSL_CERT | 无 | - | SSL客户端证书路径 |
SSL_KEY | 无 | - | SSL客户端密钥路径 |
SSL_VERIFY_CERT | 否 | true | 验证SSL证书 |
SSL_VERIFY_IDENTITY | 否 | false | 验证SSL主机名 |
READ_ONLY | 否 | 真 | 启用只读模式 |
MAX_POOL_SIZE | 否 | 10 | 最大连接池大小 |
EMBEDDING_PROVIDER | 无 | - | 嵌入提供程序: openai 或 gemini |
OPENAI_KEY | 否 | - | OpenAI API密钥 |
GEMINI_KEY | 否 | - | Google Gemini API密钥 |
示例.env文件
MCP_MARIADB_HOST=localhost
MCP_MARIADB_PORT=3306
MCP_MARIADB_USER=mariadb_user
MCP_MARIADB_PASSWORD=secure_password
MCP_MARIADB_DATABASE=mydb
MCP_MARIADB_READ_ONLY=true
MCP_MARIADB_MAX_POOL_SIZE=10
# Optional: For vector store features
MCP_MARIADB_EMBEDDING_PROVIDER=openai
MCP_MARIADB_OPENAI_KEY=sk-...用法
克劳德桌面版
添加到您的Claude Desktop配置中:
{
"mcpServers": {
"mariadb": {
"command": "mcp-mariadb",
"env": {
"MCP_MARIADB_HOST": "localhost",
"MCP_MARIADB_PORT": "3306",
"MCP_MARIADB_USER": "your_user",
"MCP_MARIADB_PASSWORD": "your_password"
}
}
}
}命令行
# stdio transport (default)
mcp-mariadb --transport stdio
# SSE transport
mcp-mariadb --transport sse --host 0.0.0.0 --port 9001
# HTTP transport
mcp-mariadb --transport http --host 0.0.0.0 --port 9001 --path /mcp码头工人
docker run -d \
-e MCP_MARIADB_HOST=host.docker.internal \
-e MCP_MARIADB_PORT=3306 \
-e MCP_MARIADB_USER=root \
-e MCP_MARIADB_PASSWORD=password \
-e MCP_MARIADB_READ_ONLY=true \
-p 9001:9001 \
ghcr.io/rahadiangg/mcp-mariadb:latest \
--transport sse --host 0.0.0.0可用工具
数据库工具(6)
| 工具 | 说明 |
|---|---|
list_databases | 列出所有可访问的数据库 |
list_tables | 列出数据库中的所有表 |
get_table_schema | 获取表的架构(列、类型) |
get_table_schema_with_relations | 获取具有外键关系的架构 |
execute_sql | 执行只读SQL查询 |
create_database | 创建新数据库 |
矢量存储工具(5)
*需要 EMBEDDING_PROVIDER 待配置*
| 工具 | 说明 |
|---|---|
create_vector_store | 创建一个带有索引VECTOR列的表 |
list_vector_stores | 列出数据库中的所有矢量存储 |
delete_vector_store | 删除矢量存储表 |
insert_docs_vector_store | 插入带有嵌入的文档 |
search_vector_store | 基于余弦距离的语义搜索 |
安全
多状态保护
此服务器 总是 禁用 MULTI_STATEMENTS MySQL驱动程序中的标志,即使没有明确指定。这可以防止通过多个语句进行SQL注入,例如:
SELECT * FROM users WHERE id = 1; DROP TABLE users; --执行此类查询的尝试将被拒绝,并显示错误。
只读模式
当 READ_ONLY=true (默认),仅查询以开头 SELECT, SHOW, DESCRIBE, USE,或 EXPLAIN 是允许的。写入操作在工具级别被阻止。
发展
先决条件
- 转到1.23+
- MariaDB 10.6+(用于矢量型支持)
建筑
go build ./cmd/mcp-mariadb测试
go test ./...项目结构
./
├── cmd/mcp-mariadb/main.go # Entry point
├── internal/
│ ├── config/config.go # Environment configuration
│ ├── database/
│ │ ├── pool.go # Safe connection pool
│ │ └── driver.go # Custom driver (MULTI_STATEMENTS disabled)
│ ├── mcp/
│ │ ├── server.go # MCP server initialization
│ │ └── tools.go # 11 tool implementations
│ └── embeddings/
│ ├── service.go # Embedding service interface
│ ├── openai.go # OpenAI provider
│ └── gemini.go # Gemini provider
├── go.mod
├── Dockerfile
└── README.md许可证
MIT许可证-有关详细信息,请参阅许可证文件
