Enables secure database operations including query execution, CRUD operations, schema inspection, and connection management for MySQL databases through parameterized statements with SQL injection prevention.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bun Database MCP Servershow me the schema for the employees table"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
๐ Bun Database MCP Server
A high-performance Model Context Protocol (MCP) server built with Bun and TypeScript, providing secure database operations for MySQL databases. This server enables AI assistants to safely interact with MySQL databases through a standardized protocol.
๐น Video Tutorials
Watch these comprehensive tutorials to understand MCP development:

โจ Features
๐ Database Connection Management - Connect, disconnect, and check connection status
๐ Safe Query Execution - Execute SELECT queries with parameterized statements
๐ CRUD Operations - Create, Read, Update, and Delete records securely
๐ Schema Inspection - Read database schema and table structures
๐ค MCP Prompts - Pre-built prompts for common database operations
๐ MCP Resources - Access database documentation and schema information
๐ก๏ธ SQL Injection Prevention - Built-in validation and sanitization
โก Built with Bun - Lightning-fast runtime and package management
๐ Environment-based Configuration - Secure credential management
๐ Prerequisites
Bun v1.0 or higher
MySQL 5.7+ or MySQL 8.0+
Node.js 18+ (for compatibility)
๐ ๏ธ Installation
Clone the repository:
git clone https://github.com/yourusername/bun-db-mcp.git
cd bun-db-mcpInstall dependencies:
bun installConfigure environment variables:
cp .env.example .envEdit .env with your database credentials:
DB_HOST=localhost
DB_PORT=3306
DB_USER=your_user
DB_PASSWORD=your_password
DB_DATABASE=your_databaseInitialize the database with sample data:
The repository includes an simple_import_employees.sql file with sample employee data. Import it using one of these methods.
Option 1: Using mysql command-line client:
mysql -u your_user -p your_database < simple_import_employees.sqlOption 2: From within MySQL client:
mysql -u your_user -p your_databaseThen run:
source simple_import_employees.sql;Option 3: Using mysqldump (for backup/restore):
# To export (backup)
mysqldump -u your_user -p your_database > backup.sql
# To import (restore)
mysql -u your_user -p your_database < backup.sql๐ Usage
Transport Options
The MCP server supports three different transport protocols:
1. STDIO Transport (Default)
Standard input/output communication for MCP clients like Claude Desktop:
bun run src/index.ts
# or
bun run src/index.ts --transport stdio2. SSE Transport (Server-Sent Events)
HTTP-based transport using Server-Sent Events for real-time streaming:
bun run src/index.ts --transport sse --port 3000Endpoints:
GET http://localhost:3000/mcp- Establish SSE streamPOST http://localhost:3000/messages- Send JSON-RPC requests
Session Management: Via
sessionIdquery parameter
3. HTTP Transport (StreamableHTTP with OAuth)
Modern HTTP transport with OAuth authentication supporting both JSON and SSE responses:
bun run src/index.ts --transport http --port 3000 --oauthMCP Endpoint:
GET/POST http://localhost:3000/mcpAuth Server:
http://localhost:3001(OAuth provider with demo flows)Session Management: Via
Mcp-Session-IdheaderAuthentication: Bearer token required in
AuthorizationheaderResponse Formats:
JSON:
Accept: application/json, text/event-streamSSE:
Accept: text/event-stream, application/json
Authentication Flow:
OAuth server runs on port 3001 with demo authentication flows
Supports both in-memory demo provider and Google OAuth
MCP server validates Bearer tokens for protected resources
Set
GOOGLE_CLIENT_IDandGOOGLE_CLIENT_SECRETenvironment variables for Google OAuth
Starting the Server
Run with default STDIO transport:
bun run startRun with specific transport:
# SSE transport
bun run src/index.ts --transport sse --port 3000
# HTTP transport with OAuth
bun run src/index.ts --transport http --port 3000 --oauth
# HTTP transport without OAuth (not recommended)
bun run src/index.ts --transport http --port 3000For development with auto-reload:
bun run devAvailable Tools
The server provides six powerful tools for database operations:
1. connection - Manage Database Connection
{
"action": "connect" | "disconnect" | "status"
}2. query - Execute SELECT Queries
{
"sql": "SELECT * FROM employees WHERE hire_date > ?",
"params": ["2000-01-01"]
}3. create - Insert Records
{
"table": "employees",
"data": {
"emp_no": 500000,
"birth_date": "1990-05-15",
"first_name": "John",
"last_name": "Doe",
"gender": "M",
"hire_date": "2024-01-15"
}
}4. update - Update Records
{
"table": "employees",
"data": { "hire_date": "2024-02-01" },
"where": { "emp_no": 500000 }
}5. delete - Delete Records
{
"table": "employees",
"where": { "emp_no": 500000 }
}6. readSchema - Inspect Database Schema
{
"table": "employees"
}Available Prompts
The server provides pre-built prompts for common database operations:
1. query-employees - Natural Language Queries
Query the employees table using natural language instructions.
Arguments:
instructions- e.g., "count female employees", "show 10 recent hires"
2. insert-employee - Add New Employee
Insert a new employee with all related information (department, title, salary).
Arguments:
employee_info- Employee details in natural language
3. delete-employee - Remove Employee
Delete an employee and all related records from the database.
Arguments:
employee_identifier- Employee number or name
4. manage-departments - Department Operations
Insert a new department or delete an existing department.
Arguments:
instructions- e.g., "add Marketing department", "delete department d005"
Available Resources
The server exposes the following MCP resources:
bun-db-mcp://general-database - Database Schema Documentation
Type:
text/markdownDescription: Complete documentation of the employee database schema including:
Table structures and columns
Entity relationships
Key design patterns
Common query patterns
Mermaid ER diagram
๐งช Testing
Run the test suite:
bun testRun specific test files:
bun test:db # Database connection tests
bun test:tools # Tool validation testsWatch mode for development:
bun test:watch๐ง Configuration
MCP Client Configuration
STDIO Transport (Claude Desktop)
To use with Claude Desktop or other MCP clients, add to your configuration:
{
"mcpServers": {
"bun-db-mcp": {
"command": "bun",
"args": [
"run",
"<root path>/src/index.ts",
"--transport",
"stdio"
],
"env": {
"DB_HOST": "127.0.0.1",
"DB_PORT": "3306",
"DB_USER": "root",
"DB_PASSWORD": "<your_password>",
"DB_DATABASE": "employees"
}
}
}
}HTTP/SSE Transport (Web Clients)
For HTTP-based transports, use curl or web clients:
SSE Transport Example:
# Establish SSE stream
curl -N -H "Accept: text/event-stream" \
http://localhost:3000/mcp
# Send requests (in another terminal)
curl -X POST http://localhost:3000/messages?sessionId=<session-id> \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'HTTP Transport with OAuth Example:
# First, get an access token from the auth server
curl -X POST http://localhost:3001/oauth/token \
-H "Content-Type: application/json" \
-d '{"grant_type": "client_credentials", "client_id": "demo-client", "client_secret": "demo-secret"}'
# Use the token to make MCP requests
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer <access-token>" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'
# SSE response with authentication
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream, application/json" \
-H "Authorization: Bearer <access-token>" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' \
--no-bufferEnvironment Variables
Variable | Description | Default |
| MySQL host address |
|
| MySQL port |
|
| Database user |
|
| Database password | - |
| Database name |
|
| Google OAuth client ID (optional) | - |
| Google OAuth client secret (optional) | - |
๐๏ธ Project Structure
bun-db-mcp/
โโโ src/
โ โโโ index.ts # Main MCP server with transport selection
โ โโโ handlers.ts # Shared MCP request handlers
โ โโโ transports/ # Transport implementations
โ โ โโโ stdio.ts # STDIO transport (default)
โ โ โโโ sse.ts # Server-Sent Events transport
โ โ โโโ http.ts # StreamableHTTP transport with OAuth support
โ โโโ auth/ # OAuth authentication providers
โ โ โโโ demoInMemoryOAuthProvider.ts # Demo OAuth provider
โ โ โโโ googleOAuthProvider.ts # Google OAuth provider
โ โโโ db/
โ โ โโโ connection.ts # Database connection manager
โ โ โโโ types.ts # TypeScript type definitions
โ โโโ tools/
โ โ โโโ index.ts # Tool implementations
โ โโโ specs/
โ โ โโโ database-schema.md # Database schema documentation
โ โ โโโ query-employees.md # Query prompt specification
โ โ โโโ insert-employee-info.md # Insert prompt specification
โ โ โโโ delete-employee.md # Delete prompt specification
โ โ โโโ manage-departments.md # Department management prompt
โ โโโ utils/
โ โโโ validation.ts # Input validation & sanitization
โโโ tests/
โ โโโ db.test.ts # Database tests
โ โโโ tools.test.ts # Tool tests
โโโ .env.example # Environment template
โโโ package.json # Project configuration๐ Security Features
OAuth Authentication - Bearer token authentication for HTTP transport
Protected Resources - Access control for sensitive database operations
Parameterized Queries - All queries use prepared statements to prevent SQL injection
Input Validation - Table and column names are validated against strict patterns
Identifier Escaping - Database identifiers are properly escaped
SELECT-only Queries - Query tool restricted to SELECT statements only
Environment Variables - Sensitive credentials stored in environment files
CORS Protection - Configurable cross-origin resource sharing policies
๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Fork the repository
Create your feature branch (
git checkout -b feature/AmazingFeature)Commit your changes (
git commit -m 'Add some AmazingFeature')Push to the branch (
git push origin feature/AmazingFeature)Open a Pull Request
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
Built with Bun - The fast all-in-one JavaScript runtime
Uses MCP SDK for protocol implementation
Database connectivity via mysql2
๐ Performance
Thanks to Bun's optimized runtime:
๐ Fast Startup - Server starts in milliseconds
โก Low Memory - Efficient memory usage
๐ฅ High Throughput - Handle multiple database operations efficiently
๐ Troubleshooting
Common Issues
Connection Refused
Verify MySQL is running
Check host and port in
.envEnsure user has proper permissions
Authentication Failed
Verify credentials in
.envCheck MySQL user permissions
Ensure database exists
Module Not Found
Run
bun installto install dependenciesVerify Bun version with
bun --version
๐ Support
For issues and questions:
Open an issue on GitHub Issues
Check existing issues for solutions
Provide detailed error messages and steps to reproduce
Built with โค๏ธ using Bun and TypeScript