MariaDB模型上下文协议服务器

MariaDB MCP Server是一个用Go编写的模型上下文协议服务器,提供对MariaDB数据库的安全访问,支持向量存储和语义搜索功能。

  • by rahadiangg
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 rahadiangg/mcp-mariadb

使用说明

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许可证-有关详细信息,请参阅许可证文件