Connects to and interacts with various database systems like SQLite, PostgreSQL, SQL Server, and MongoDB.
A Model Context Protocol (MCP) implementation for connecting to and working with various database systems.
npm install -g mcp-dbs
The MCP Database Server can be used in two modes:
By default, the server runs in SSE (Server-Sent Events) mode on port 3001:
npx mcp-dbs
This will start an HTTP server with an SSE endpoint at http://localhost:3001/mcp
.
You can specify a custom port using the --port
option:
npx mcp-dbs --port 8080
For tools that communicate over standard input/output, you can use the --stdio
option:
npx mcp-dbs --stdio
You can integrate mcp-dbs with Claude Desktop by adding it to your Claude configuration file.
mcpServers
section:{
"mcpServers": {
"mcp-dbs": {
"command": "node",
"args": [
"/path/to/your/mcp-dbs/dist/cli.js",
"--stdio"
],
"env": {
"MCP_MONGODB_URI": "mongodb://localhost:27017",
"MCP_MONGODB_DATABASE": "your-database-name"
}
}
}
}
Replace the environment variables with your own database connection details.
command
should be node
args
, provide the absolute path to the cli.js file in your mcp-dbs installationOnce configured, Claude will be able to access your database using the MCP tools described below. You can ask Claude to:
You can configure your database connections using environment variables:
# Set these environment variables before connecting
export MCP_SQLITE_FILENAME="path/to/database.db"
export MCP_SQLITE_CREATE_IF_NOT_EXISTS="true"
# Set these environment variables before connecting
export MCP_POSTGRES_HOST="your-postgres-host"
export MCP_POSTGRES_PORT="5432"
export MCP_POSTGRES_DATABASE="your-database-name"
export MCP_POSTGRES_USER="your-username"
export MCP_POSTGRES_PASSWORD="your-password"
export MCP_POSTGRES_SSL="false"
# Set these environment variables before connecting
export MCP_MSSQL_SERVER="your-server-address"
export MCP_MSSQL_PORT="1433"
export MCP_MSSQL_DATABASE="your-database-name"
export MCP_MSSQL_USER="your-username"
export MCP_MSSQL_PASSWORD="your-password"
export MCP_MSSQL_ENCRYPT="true"
export MCP_MSSQL_TRUST_SERVER_CERTIFICATE="true"
# Set these environment variables before connecting
export MCP_MONGODB_URI="mongodb://localhost:27017"
export MCP_MONGODB_DATABASE="your-database-name"
export MCP_MONGODB_MAX_POOL_SIZE="10"
export MCP_MONGODB_USE_UNIFIED_TOPOLOGY="true"
These environment variables will take precedence over any configuration passed to the connect-database tool.
The server exposes the following MCP tools:
Connect to a database.
Parameters:
connectionId
: A unique identifier for the connectiontype
: Database type (sqlite
, postgres
, mssql
, or mongodb
)Example for SQLite:
{
"connectionId": "my-sqlite-db",
"type": "sqlite"
}
Example for PostgreSQL:
{
"connectionId": "my-postgres-db",
"type": "postgres"
}
Example for SQL Server:
{
"connectionId": "my-mssql-db",
"type": "mssql"
}
Example for MongoDB:
{
"connectionId": "my-mongodb-db",
"type": "mongodb"
}
Disconnect from a database.
Parameters:
connectionId
: The connection ID to disconnectExecute a query that returns results.
Parameters:
connectionId
: The connection IDquery
: SQL query or MongoDB aggregation pipeline (as JSON string)params
: (Optional) Array of parameters for the query. For MongoDB, the first parameter is the collection name.Example for SQL:
{
"connectionId": "my-postgres-db",
"query": "SELECT * FROM users WHERE age > $1",
"params": [21]
}
Example for MongoDB:
{
"connectionId": "my-mongodb-db",
"query": "[{\"$match\": {\"age\": {\"$gt\": 21}}}, {\"$sort\": {\"name\": 1}}]",
"params": ["users"]
}
Example for MongoDB (new format with embedded collection):
{
"connectionId": "my-mongodb-db",
"query": "{\"collection\": \"users\", \"pipeline\": [{\"$match\": {\"age\": {\"$gt\": 21}}}, {\"$sort\": {\"name\": 1}}]}"
}
Example for MongoDB (shell syntax):
{
"connectionId": "my-mongodb-db",
"query": "db.getCollection('users').find({\"age\": {\"$gt\": 21}})"
}
Example for MongoDB (direct collection reference shell syntax):
{
"connectionId": "my-mongodb-db",
"query": "db.users.find({\"age\": {\"$gt\": 21}})"
}
Example for MongoDB (raw command):
{
"connectionId": "my-mongodb-db",
"query": "{\"find\": \"users\", \"filter\": {\"age\": {\"$gt\": 21}}}"
}
Execute a query that doesn't return results (INSERT, UPDATE, DELETE).
Parameters:
connectionId
: The connection IDquery
: SQL query or MongoDB command (as JSON string)params
: (Optional) Array of parameters for the query. For MongoDB, the first parameter is the collection name.Example for SQL:
{
"connectionId": "my-postgres-db",
"query": "INSERT INTO users (name, age) VALUES ($1, $2)",
"params": ["John Doe", 30]
}
Example for MongoDB:
{
"connectionId": "my-mongodb-db",
"query": "{\"insertOne\": {\"name\": \"John Doe\", \"age\": 30}}",
"params": ["users"]
}
Example for MongoDB (new format with embedded collection):
{
"connectionId": "my-mongodb-db",
"query": "{\"collection\": \"users\", \"operation\": {\"insertOne\": {\"name\": \"John Doe\", \"age\": 30}}}"
}
Example for MongoDB (shell syntax):
{
"connectionId": "my-mongodb-db",
"query": "db.getCollection('users').insertOne({\"name\": \"John Doe\", \"age\": 30})"
}
Example for MongoDB (direct collection reference shell syntax):
{
"connectionId": "my-mongodb-db",
"query": "db.users.insertOne({\"name\": \"John Doe\", \"age\": 30})"
}
Example for MongoDB (raw command):
{
"connectionId": "my-mongodb-db",
"query": "{\"insert\": \"users\", \"documents\": [{\"name\": \"John Doe\", \"age\": 30}]}"
}
The server exposes the following MCP resources:
URI: database://{connectionId}/schema
Returns schema information about the database, including all tables and their columns.
URI: database://{connectionId}/tables/{tableName}
Returns schema information about a specific table, including its columns.
URI: database://{connectionId}/tables
Returns a list of all tables in the database.
Run the tests:
npm test
If you find this project helpful, consider buying me a coffee!
Scan the QR code above or click here to support the development of this project.
MIT
Provides read-only access to Apache Iceberg tables via Apache Impala, allowing LLMs to inspect schemas and execute queries.
Perform database actions on Amazon Redshift via its Data API.
Interact with the data stored in Couchbase clusters using natural language.
Integrate with Metabase to query databases and visualize data. Requires Metabase URL and API key for authentication.
Access the OpenGenes database for aging and longevity research, with automatic updates from Hugging Face Hub.
Implement semantic memory layer on top of the Qdrant vector search engine
Allows LLMs to directly interact with a YugabyteDB database.
Search and query patient Electronic Health Record (EHR) data using SMART on FHIR.
Connect to any relational database, and be able to get valid SQL, and ask questions like what does a certain column prefix mean.
Access the NFTGo Developer API for comprehensive NFT data and analytics. Requires an NFTGo API key.