@benborla29/mcp-server-mysql
Version:
MCP server for interacting with MySQL databases with write operations support
72 lines (71 loc) • 3.6 kB
JavaScript
import * as dotenv from "dotenv";
import { parseSchemaPermissions, parseMySQLConnectionString } from "../utils/index.js";
export const MCP_VERSION = "2.0.2";
dotenv.config();
const connectionStringConfig = process.env.MYSQL_CONNECTION_STRING
? parseMySQLConnectionString(process.env.MYSQL_CONNECTION_STRING)
: {};
if (process.env.NODE_ENV === "test" && !process.env.MYSQL_DB) {
process.env.MYSQL_DB = "mcp_test_db";
}
export const ALLOW_INSERT_OPERATION = process.env.ALLOW_INSERT_OPERATION === "true";
export const ALLOW_UPDATE_OPERATION = process.env.ALLOW_UPDATE_OPERATION === "true";
export const ALLOW_DELETE_OPERATION = process.env.ALLOW_DELETE_OPERATION === "true";
export const ALLOW_DDL_OPERATION = process.env.ALLOW_DDL_OPERATION === "true";
export const MYSQL_DISABLE_READ_ONLY_TRANSACTIONS = process.env.MYSQL_DISABLE_READ_ONLY_TRANSACTIONS === "true";
export const SCHEMA_INSERT_PERMISSIONS = parseSchemaPermissions(process.env.SCHEMA_INSERT_PERMISSIONS);
export const SCHEMA_UPDATE_PERMISSIONS = parseSchemaPermissions(process.env.SCHEMA_UPDATE_PERMISSIONS);
export const SCHEMA_DELETE_PERMISSIONS = parseSchemaPermissions(process.env.SCHEMA_DELETE_PERMISSIONS);
export const SCHEMA_DDL_PERMISSIONS = parseSchemaPermissions(process.env.SCHEMA_DDL_PERMISSIONS);
export const IS_REMOTE_MCP = process.env.IS_REMOTE_MCP === "true";
export const REMOTE_SECRET_KEY = process.env.REMOTE_SECRET_KEY || "";
export const PORT = process.env.PORT || 3000;
const dbFromEnvOrConnString = connectionStringConfig.database || process.env.MYSQL_DB;
export const isMultiDbMode = !dbFromEnvOrConnString || dbFromEnvOrConnString.trim() === "";
export const mcpConfig = {
server: {
name: "@benborla29/mcp-server-mysql",
version: MCP_VERSION,
connectionTypes: ["stdio", "streamableHttp"],
},
mysql: {
...(connectionStringConfig.socketPath || process.env.MYSQL_SOCKET_PATH
? {
socketPath: connectionStringConfig.socketPath || process.env.MYSQL_SOCKET_PATH,
}
: {
host: connectionStringConfig.host || process.env.MYSQL_HOST || "127.0.0.1",
port: connectionStringConfig.port || Number(process.env.MYSQL_PORT || "3306"),
}),
user: connectionStringConfig.user || process.env.MYSQL_USER || "root",
password: connectionStringConfig.password !== undefined
? connectionStringConfig.password
: process.env.MYSQL_PASS === undefined
? ""
: process.env.MYSQL_PASS,
database: connectionStringConfig.database || process.env.MYSQL_DB || undefined,
connectionLimit: 10,
waitForConnections: true,
queueLimit: process.env.MYSQL_QUEUE_LIMIT ? parseInt(process.env.MYSQL_QUEUE_LIMIT, 10) : 100,
enableKeepAlive: true,
keepAliveInitialDelay: 0,
connectTimeout: process.env.MYSQL_CONNECT_TIMEOUT ? parseInt(process.env.MYSQL_CONNECT_TIMEOUT, 10) : 10000,
authPlugins: {
mysql_clear_password: () => () => Buffer.from(connectionStringConfig.password !== undefined
? connectionStringConfig.password
: process.env.MYSQL_PASS !== undefined
? process.env.MYSQL_PASS
: ""),
},
...(process.env.MYSQL_SSL === "true"
? {
ssl: {
rejectUnauthorized: process.env.MYSQL_SSL_REJECT_UNAUTHORIZED === "true",
},
}
: {}),
},
paths: {
schema: "schema",
},
};