Official server.json
{
"name": "io.github.shibbirweb/mcp-db-read-only",
"title": "Databases (read-only, switchable)",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"version": "1.1.0",
"packages": [
{
"version": "1.1.0",
"transport": {
"type": "stdio"
},
"identifier": "@shibbirweb/mcp-db-read-only",
"registryType": "npm",
"environmentVariables": [
{
"name": "DB_URL",
"format": "string",
"description": "Connection URL to open at startup, e.g. postgres://user@host:5432/db, mongodb://user@host/db, redis://host:6379/0 or sqlite:///data/app.db"
},
{
"name": "DB_PASSWORD",
"format": "string",
"isSecret": true,
"description": "Password for DB_URL, so it need not be percent-encoded inside the URL"
},
{
"name": "DB_PROFILES",
"format": "string",
"isSecret": true,
"description": "JSON object of named connections to switch between, each a URL or {\"url\", \"password\"}"
},
{
"name": "DB_DEFAULT_PROFILE",
"format": "string",
"description": "Which DB_PROFILES entry to start on"
},
{
"name": "DB_CONNECT_TIMEOUT_MS",
"format": "number",
"description": "Connection timeout in milliseconds. Defaults to 10000"
},
{
"name": "DB_QUERY_TIMEOUT_MS",
"format": "number",
"description": "Server-side query timeout in milliseconds. Defaults to 30000"
},
{
"name": "DB_LOG",
"format": "boolean",
"description": "true logs every tool call, its statements and full output to stderr. Off by default"
},
{
"name": "DB_LOG_FILE",
"format": "filepath",
"description": "Log every tool call to this file instead. Implies DB_LOG"
},
{
"name": "DB_LOG_DIR",
"format": "filepath",
"description": "Save every tool call as its own JSON file in this folder, permanently. Implies logging"
},
{
"name": "DB_LOG_FORMAT",
"format": "string",
"description": "pretty (default) or json, one object per line"
},
{
"name": "DB_LOG_PORT",
"format": "number",
"description": "Serve a live log viewer in the browser on this port. Needs DB_LOG_DIR, DB_LOG or DB_LOG_FILE. No access control"
},
{
"name": "DB_LOG_HISTORY",
"format": "number",
"description": "Entries the viewer keeps in memory when DB_LOG_DIR is not set. Defaults to 500"
},
{
"name": "MYSQL_HOST",
"format": "string",
"description": "Legacy MySQL-only form, kept for drop-in compatibility. Prefer DB_URL"
},
{
"name": "MYSQL_USER",
"format": "string",
"description": "Legacy MySQL-only form. Prefer DB_URL"
},
{
"name": "MYSQL_PASSWORD",
"format": "string",
"isSecret": true,
"description": "Legacy MySQL-only form. Prefer DB_URL with DB_PASSWORD"
},
{
"name": "MYSQL_DATABASE",
"format": "string",
"description": "Legacy MySQL-only form. Prefer DB_URL"
}
]
},
{
"transport": {
"type": "stdio"
},
"identifier": "docker.io/shibbirweb/mcp-db-read-only:1.1.0",
"registryType": "oci",
"environmentVariables": [
{
"name": "DB_URL",
"format": "string",
"description": "Connection URL to open at startup, e.g. postgres://user@host:5432/db, mongodb://user@host/db, redis://host:6379/0 or sqlite:///data/app.db. Use host.docker.internal to reach the host"
},
{
"name": "DB_PASSWORD",
"format": "string",
"isSecret": true,
"description": "Password for DB_URL, so it need not be percent-encoded inside the URL"
},
{
"name": "DB_PROFILES",
"format": "string",
"isSecret": true,
"description": "JSON object of named connections to switch between, each a URL or {\"url\", \"password\"}"
},
{
"name": "DB_DEFAULT_PROFILE",
"format": "string",
"description": "Which DB_PROFILES entry to start on"
},
{
"name": "DB_CONNECT_TIMEOUT_MS",
"format": "number",
"description": "Connection timeout in milliseconds. Defaults to 10000"
},
{
"name": "DB_QUERY_TIMEOUT_MS",
"format": "number",
"description": "Server-side query timeout in milliseconds. Defaults to 30000"
},
{
"name": "DB_LOG",
"format": "boolean",
"description": "true logs every tool call, its statements and full output to stderr. Off by default"
},
{
"name": "DB_LOG_FILE",
"format": "filepath",
"description": "Log every tool call to this file instead, on a mounted volume. Implies DB_LOG"
},
{
"name": "DB_LOG_DIR",
"format": "filepath",
"description": "Save every tool call as its own JSON file in this folder, on a mounted volume. Implies logging"
},
{
"name": "DB_LOG_FORMAT",
"format": "string",
"description": "pretty (default) or json, one object per line"
},
{
"name": "DB_LOG_PORT",
"format": "number",
"description": "Serve a live log viewer on this port (publish it with -p). Needs DB_LOG_DIR, DB_LOG or DB_LOG_FILE. No access control"
},
{
"name": "DB_LOG_HISTORY",
"format": "number",
"description": "Entries the viewer keeps in memory when DB_LOG_DIR is not set. Defaults to 500"
},
{
"name": "MYSQL_HOST",
"format": "string",
"description": "Legacy MySQL-only form, kept for drop-in compatibility. Prefer DB_URL"
},
{
"name": "MYSQL_USER",
"format": "string",
"description": "Legacy MySQL-only form. Prefer DB_URL"
},
{
"name": "MYSQL_PASSWORD",
"format": "string",
"isSecret": true,
"description": "Legacy MySQL-only form. Prefer DB_URL with DB_PASSWORD"
},
{
"name": "MYSQL_DATABASE",
"format": "string",
"description": "Legacy MySQL-only form. Prefer DB_URL"
}
]
}
],
"repository": {
"url": "https://github.com/shibbirweb/mcp-db-read-only",
"source": "github"
},
"websiteUrl": "https://github.com/shibbirweb/mcp-db-read-only#readme",
"description": "Read-only SQL, MongoDB, Redis and Elasticsearch access, switchable mid-conversation."
}