Skip to main content
Glama
ross-jill-ws

Bun Database MCP Server

by ross-jill-ws

๐Ÿš€ 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:

How to build a DB MCP server in 15 minutes Understand MCP Prompts & Resources by building bun-db-mcp Master MCP Transports In 20 Minutes - STDIO,HTTP,SSE MCP Server Authorization Demystified! Step-by-Step Guide with code

โœจ 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

  1. Clone the repository:

git clone https://github.com/yourusername/bun-db-mcp.git cd bun-db-mcp
  1. Install dependencies:

bun install
  1. Configure environment variables:

cp .env.example .env

Edit .env with your database credentials:

DB_HOST=localhost DB_PORT=3306 DB_USER=your_user DB_PASSWORD=your_password DB_DATABASE=your_database
  1. Initialize 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.sql

Option 2: From within MySQL client:

mysql -u your_user -p your_database

Then 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 stdio

2. SSE Transport (Server-Sent Events)

HTTP-based transport using Server-Sent Events for real-time streaming:

bun run src/index.ts --transport sse --port 3000
  • Endpoints:

    • GET http://localhost:3000/mcp - Establish SSE stream

    • POST http://localhost:3000/messages - Send JSON-RPC requests

  • Session Management: Via sessionId query 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 --oauth
  • MCP Endpoint: GET/POST http://localhost:3000/mcp

  • Auth Server: http://localhost:3001 (OAuth provider with demo flows)

  • Session Management: Via Mcp-Session-Id header

  • Authentication: Bearer token required in Authorization header

  • Response Formats:

    • JSON: Accept: application/json, text/event-stream

    • SSE: Accept: text/event-stream, application/json

Authentication Flow:

  1. OAuth server runs on port 3001 with demo authentication flows

  2. Supports both in-memory demo provider and Google OAuth

  3. MCP server validates Bearer tokens for protected resources

  4. Set GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET environment variables for Google OAuth

Starting the Server

Run with default STDIO transport:

bun run start

Run 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 3000

For development with auto-reload:

bun run dev

Available 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/markdown

  • Description: 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 test

Run specific test files:

bun test:db # Database connection tests bun test:tools # Tool validation tests

Watch 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-buffer

Environment Variables

Variable

Description

Default

DB_HOST

MySQL host address

localhost

DB_PORT

MySQL port

3306

DB_USER

Database user

root

DB_PASSWORD

Database password

-

DB_DATABASE

Database name

mcp_test

GOOGLE_CLIENT_ID

Google OAuth client ID (optional)

-

GOOGLE_CLIENT_SECRET

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.

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/AmazingFeature)

  3. Commit your changes (git commit -m 'Add some AmazingFeature')

  4. Push to the branch (git push origin feature/AmazingFeature)

  5. 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

  1. Connection Refused

    • Verify MySQL is running

    • Check host and port in .env

    • Ensure user has proper permissions

  2. Authentication Failed

    • Verify credentials in .env

    • Check MySQL user permissions

    • Ensure database exists

  3. Module Not Found

    • Run bun install to install dependencies

    • Verify 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

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ross-jill-ws/bun-db-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server