An extensible MCP server for database operations.
Database MCP Server
MCP server for database operations. Supports PostgreSQL initially, with an extensible architecture for other engines (MySQL, SQLite, etc.).
Requirements
- Node.js >= 18
- PostgreSQL (or compatible database)
Installation
npm install
Configuration
Set environment variables:
| Variable | Description |
|---|---|
DATABASE_URL |
Connection string (e.g. postgresql://user:pass@host:5432/db) |
DB_TYPE |
Database type: postgres (default) |
MIGRATIONS_ENABLED |
Auto-record DDL changes to migration files (default: true) |
MIGRATIONS_DIR |
Migrations directory (default: ./migrations) |
Copy .env.example to .env and edit:
cp .env.example .env
Usage
Run the server
npm start
# or
npx tsx src/index.ts
MCP configuration by editor
Replace PATH_TO_PROJECT with the absolute path to this project (e.g. /home/user/postgresql-mcp). When the project is your current workspace, VS Code supports ${workspaceFolder}.
Cursor
Add to Cursor MCP settings (.cursor/mcp.json or Settings → MCP):
{
"mcpServers": {
"database": {
"command": "npx",
"args": ["tsx", "PATH_TO_PROJECT/src/index.ts"],
"env": {
"DATABASE_URL": "postgresql://user:password@localhost:5432/mydb"
}
}
}
}
Claude Code
Add a local stdio server via CLI:
claude mcp add --transport stdio --env DATABASE_URL=postgresql://user:password@localhost:5432/mydb database -- npx tsx PATH_TO_PROJECT/src/index.ts
Or add to .mcp.json in the project root (for project scope):
{
"mcpServers": {
"database": {
"command": "npx",
"args": ["tsx", "PATH_TO_PROJECT/src/index.ts"],
"env": {
"DATABASE_URL": "postgresql://user:password@localhost:5432/mydb"
}
}
}
}
VS Code
Add to .vscode/mcp.json (workspace) or user mcp.json (Command Palette → MCP: Open User Configuration):
{
"servers": {
"database": {
"type": "stdio",
"command": "npx",
"args": ["tsx", "PATH_TO_PROJECT/src/index.ts"],
"env": {
"DATABASE_URL": "postgresql://user:password@localhost:5432/mydb"
}
}
}
}
Optional: use envFile to load from .env and ${workspaceFolder} when this project is the workspace:
{
"servers": {
"database": {
"type": "stdio",
"command": "npx",
"args": ["tsx", "${workspaceFolder}/src/index.ts"],
"envFile": "${workspaceFolder}/.env"
}
}
}
Zed
Add to settings.json (Command Palette → Preferences: Open User Settings):
{
"context_servers": {
"database": {
"source": "custom",
"command": "npx",
"args": ["tsx", "PATH_TO_PROJECT/src/index.ts"],
"env": {
"DATABASE_URL": "postgresql://user:password@localhost:5432/mydb"
}
}
}
}
OpenCode
Add to opencode.json or opencode.jsonc in the project root:
{
"mcp": {
"database": {
"type": "local",
"command": ["npx", "tsx", "PATH_TO_PROJECT/src/index.ts"],
"enabled": true,
"environment": {
"DATABASE_URL": "postgresql://user:password@localhost:5432/mydb"
}
}
}
}
Tools
Schemas
db_list_schemas- List schemasdb_create_schema- Create schemadb_get_schema- Get schema detailsdb_alter_schema- Rename schemadb_drop_schema- Drop schema
Tables
db_list_tables- List tablesdb_create_table- Create tabledb_get_table- Get table detailsdb_alter_table- Alter tabledb_drop_table- Drop table
Indexes, Views, Sequences, Triggers, Functions, Extensions
db_list_*/db_create_*/db_drop_*for each type
Data
db_query- Execute SELECTdb_insert- Insert rowsdb_update- Update rowsdb_delete- Delete rowsdb_execute_sql- Execute arbitrary SQL
Auth (roles and permissions)
db_list_roles- List rolesdb_create_role- Create roledb_create_user- Create user (role with LOGIN)db_alter_role- Alter roledb_drop_role- Drop roledb_grant_role_membership- Grant role to roledb_revoke_role_membership- Revoke role membershipdb_grant_schema- Grant USAGE/CREATE on schemadb_revoke_schema- Revoke schema privilegesdb_grant_table- Grant SELECT/INSERT/UPDATE/DELETE on tabledb_revoke_table- Revoke table privilegesdb_grant_all_tables_in_schema- Grant on all tables in schemadb_revoke_all_tables_in_schema- Revoke on all tables in schemadb_list_grants- List grants for a role
Migrations
db_list_migrations- List applied and pending migrationsdb_apply_migration- Apply a single migration by filenamedb_apply_all_migrations- Apply all pending migrations (sync DB)
Each DDL change (create schema, table, index, etc.) is automatically recorded to migrations/ when MIGRATIONS_ENABLED=true.
Agent
Tools (6)
db_list_schemasList all schemas in the database.db_create_tableCreate a new table in the database.db_queryExecute a SELECT query.db_execute_sqlExecute arbitrary SQL commands.db_create_userCreate a new database user with login privileges.db_apply_all_migrationsApply all pending migrations to synchronize the database.Environment Variables
DATABASE_URLrequiredConnection string for the databaseDB_TYPEDatabase type (default: postgres)MIGRATIONS_ENABLEDAuto-record DDL changes to migration filesMIGRATIONS_DIRDirectory for migration filesConfiguration
{"mcpServers": {"database": {"command": "npx", "args": ["tsx", "PATH_TO_PROJECT/src/index.ts"], "env": {"DATABASE_URL": "postgresql://user:password@localhost:5432/mydb"}}}}