Skip to main content
Glama
Nam088

Multi-Database MCP Server

by Nam088
README.md7.36 kB
# @nam088/mcp-sql-server Microsoft SQL Server plugin for Model Context Protocol (MCP) server. ## Features - 🔍 **Query Execution**: Execute SELECT queries with parameterized inputs - 📊 **Database Introspection**: List databases, tables, schemas, indexes, and constraints - 🔧 **Maintenance Operations**: Rebuild indexes, update statistics - 📈 **Performance Monitoring**: View active sessions, query execution plans - 🛡️ **Type-Safe**: Full TypeScript support with proper typing - 🔒 **Secure**: Support for encrypted connections and SQL Server authentication - ⚡ **Connection Pooling**: Efficient connection management with configurable pool settings ## Installation ```bash npm install @nam088/mcp-sql-server ``` ## Configuration ### Environment Variables Configure your SQL Server connection using environment variables: ```bash # Required MSSQL_HOST=localhost MSSQL_PORT=1433 MSSQL_USER=sa MSSQL_PASSWORD=your_password MSSQL_DATABASE=your_database # Optional MSSQL_MODE=READONLY # Plugin mode: READONLY or FULL MSSQL_POOL_MAX=10 # Maximum pool size MSSQL_POOL_MIN=0 # Minimum pool size MSSQL_IDLE_TIMEOUT=30000 # Idle timeout in milliseconds MSSQL_CONNECTION_TIMEOUT=15000 # Connection timeout MSSQL_REQUEST_TIMEOUT=15000 # Request timeout ``` ### Plugin Configuration ```typescript import { SqlServerPlugin } from '@nam088/mcp-sql-server'; const plugin = new SqlServerPlugin({ server: 'localhost', port: 1433, user: 'sa', password: 'your_password', database: 'your_database', mode: 'READONLY', // or 'FULL' encrypt: true, trustServerCertificate: false, poolMax: 10, poolMin: 0, connectionTimeout: 15000, requestTimeout: 15000, }); ``` ## Usage ### As Standalone MCP Server Create `mcp-config.json`: ```json { "mcpServers": { "sql-server": { "command": "npx", "args": [ "-y", "@nam088/mcp-sql-server" ], "env": { "MSSQL_HOST": "localhost", "MSSQL_PORT": "1433", "MSSQL_USER": "sa", "MSSQL_PASSWORD": "your_password", "MSSQL_DATABASE": "your_database", "MSSQL_MODE": "READONLY" } } } } ``` ### Complete Configuration Examples **Basic Configuration:** ```json { "mcpServers": { "sql-server": { "command": "npx", "args": [ "-y", "@nam088/mcp-sql-server" ], "env": { "MSSQL_HOST": "localhost", "MSSQL_PORT": "1433", "MSSQL_USER": "sa", "MSSQL_PASSWORD": "your_password", "MSSQL_DATABASE": "your_database", "MSSQL_MODE": "READONLY" } } } } ``` **With Connection Pool Settings:** ```json { "mcpServers": { "sql-server": { "command": "npx", "args": [ "-y", "@nam088/mcp-sql-server" ], "env": { "MSSQL_HOST": "sqlserver.example.com", "MSSQL_PORT": "1433", "MSSQL_USER": "db_user", "MSSQL_PASSWORD": "your_password", "MSSQL_DATABASE": "production_db", "MSSQL_MODE": "FULL", "MSSQL_POOL_MAX": "10", "MSSQL_POOL_MIN": "0", "MSSQL_IDLE_TIMEOUT": "30000", "MSSQL_CONNECTION_TIMEOUT": "15000", "MSSQL_REQUEST_TIMEOUT": "15000" } } } } ``` **Azure SQL Database Configuration:** ```json { "mcpServers": { "sql-server": { "command": "npx", "args": [ "-y", "@nam088/mcp-sql-server" ], "env": { "MSSQL_HOST": "your-server.database.windows.net", "MSSQL_PORT": "1433", "MSSQL_USER": "admin_user", "MSSQL_PASSWORD": "your_password", "MSSQL_DATABASE": "azure_database", "MSSQL_MODE": "READONLY", "MSSQL_POOL_MAX": "20", "MSSQL_CONNECTION_TIMEOUT": "30000" } } } } ``` ### As Plugin in Your MCP Server ```typescript import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { PluginRegistry } from '@nam088/mcp-core'; import { SqlServerPlugin } from '@nam088/mcp-sql-server'; const server = new McpServer( { name: 'my-server', version: '1.0.0' }, { capabilities: { tools: {} } } ); const registry = new PluginRegistry(server); await registry.registerPlugin(SqlServerPlugin); const transport = new StdioServerTransport(); await server.connect(transport); ``` ## Available Tools ### Read-Only Tools (READONLY mode) - **sqlserver_query**: Execute SELECT queries - **sqlserver_list_databases**: List all databases - **sqlserver_list_tables**: List tables in a schema - **sqlserver_describe_table**: Get table structure details - **sqlserver_list_schemas**: List all schemas - **sqlserver_list_indexes**: List indexes for a table - **sqlserver_list_constraints**: List constraints for a table - **sqlserver_database_info**: Get database server information - **sqlserver_explain_query**: Get query execution plan - **sqlserver_active_sessions**: List active database sessions - **sqlserver_table_stats**: Get table statistics (size, rows, etc) ### Write Tools (FULL mode only) - **sqlserver_execute**: Execute INSERT, UPDATE, DELETE, DDL queries - **sqlserver_kill_session**: Kill a database session - **sqlserver_rebuild_index**: Rebuild table indexes - **sqlserver_update_statistics**: Update table statistics ## Plugin Modes ### READONLY Mode (Default) Only read operations are allowed. Safe for production use. ```bash MSSQL_MODE=READONLY ``` ### FULL Mode All operations including writes are allowed. Use with caution. ```bash MSSQL_MODE=FULL ``` ## Examples ### Query with Parameters ```typescript // Tool: sqlserver_query { "query": "SELECT * FROM users WHERE id = @id AND status = @status", "params": { "id": 1, "status": "active" } } ``` ### List Tables ```typescript // Tool: sqlserver_list_tables { "schema": "dbo" } ``` ### Get Table Structure ```typescript // Tool: sqlserver_describe_table { "table": "users", "schema": "dbo" } ``` ### Execute Write Operation (FULL mode) ```typescript // Tool: sqlserver_execute { "query": "INSERT INTO users (name, email) VALUES (@name, @email)", "params": { "name": "John Doe", "email": "john@example.com" } } ``` ## Security Best Practices 1. **Use Encrypted Connections**: Set `encrypt: true` in production 2. **Limit Permissions**: Use database users with minimal required permissions 3. **Use READONLY Mode**: For most use cases, READONLY mode is sufficient 4. **Parameterized Queries**: Always use named parameters to prevent SQL injection 5. **Connection Pooling**: Configure appropriate pool sizes for your workload 6. **Certificate Validation**: Set `trustServerCertificate: false` in production ## Type Safety This plugin is fully typed with TypeScript. All query results and configurations use proper types from the `mssql` library, ensuring type safety throughout your application. ```typescript import type { SqlServerPluginConfig, SqlServerQueryResult } from '@nam088/mcp-sql-server'; ``` ## Requirements - Node.js >= 18 - SQL Server 2012 or later (including Azure SQL Database) - Network access to SQL Server instance ## License MIT ## Author nam088 ## Support For issues and questions, please visit the [GitHub repository](https://github.com/nam088/mcp-server).

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/Nam088/mcp-server'

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