SQL Server

Enables AI assistants to access and query SQL Server databases.

SQL Server MCP Server

A Model Context Protocol (MCP) server that provides AI assistants with SQL Server database access capabilities.

Features

  • Execute SQL queries with automatic safety limits
  • Database schema inspection and exploration
  • Table statistics and performance monitoring
  • Advanced search capabilities for tables and columns
  • Table backup functionality
  • Data insertion with conflict handling
  • Query execution plan analysis
  • Connection health monitoring

Quick Start

1. Setup Environment

# Navigate to project directory
cd C:\Users\benha\Desktop\sql-server-mcp

# Create virtual environment
python -m venv venv
venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

2. Configure Database Connection

Edit the .env file with your SQL Server credentials:

SQL_SERVER_HOST=192.168.1.117
SQL_SERVER_DATABASE=EM_Data
SQL_SERVER_USERNAME=benhg
SQL_SERVER_PASSWORD=your_actual_password
SQL_SERVER_PORT=1433

3. Test the Server

python -m sql_server_mcp.server

Integration with AI Tools

Claude Desktop

Add to your Claude Desktop configuration file:

Location:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Configuration:

{
  "mcpServers": {
    "sql-server": {
      "command": "python",
      "args": ["-m", "sql_server_mcp.server"],
      "cwd": "C:\\Users\\benha\\Desktop\\sql-server-mcp",
      "env": {
        "SQL_SERVER_HOST": "192.168.1.117",
        "SQL_SERVER_DATABASE": "EM_Data",
        "SQL_SERVER_USERNAME": "benhg",
        "SQL_SERVER_PASSWORD": "your_password_here",
        "SQL_SERVER_PORT": "1433"
      }
    }
  }
}

VS Code

  1. Install the "Model Context Protocol" extension
  2. Add to VS Code settings.json:
{
  "mcp.servers": {
    "sql-server": {
      "command": "python",
      "args": ["-m", "sql_server_mcp.server"],
      "cwd": "C:\\Users\\benha\\Desktop\\sql-server-mcp"
    }
  }
}

Cursor

Add to Cursor MCP configuration:

{
  "mcp": {
    "servers": {
      "sql-server": {
        "command": "python",
        "args": ["-m", "sql_server_mcp.server"],
        "cwd": "C:\\Users\\benha\\Desktop\\sql-server-mcp"
      }
    }
  }
}

Available Tools

  1. execute_query - Run SQL queries with safety limits
  2. get_schema - Inspect database structure
  3. get_table_info - Detailed table information with samples
  4. explain_query - Query execution plans
  5. check_connection - Database connectivity status
  6. get_table_stats - Table size and performance metrics
  7. search_tables - Find tables and columns by name
  8. backup_table - Create table backups
  9. insert_data - Insert data with conflict handling

Usage Examples

Once integrated with Claude, you can ask:

  • "Show me the schema of my SeriesRecord table"
  • "Execute: SELECT TOP 10 * FROM SeriesRecord WHERE Source = 'NBP'"
  • "What tables do I have in my database?"
  • "Create a backup of my SeriesRecord table"
  • "Search for any tables containing 'GDP'"
  • "Show me statistics for all my tables"

Security Features

  • Automatic query limits (TOP 1000 by default)
  • Parameterized query support
  • Environment-based configuration
  • Connection pooling and health checks
  • Comprehensive error handling

Development

Running Tests

pip install pytest pytest-asyncio
pytest tests/

Project Structure

sql-server-mcp/
├── sql_server_mcp/
│   ├── __init__.py
│   └── server.py
├── tests/
│   ├── __init__.py
│   └── test_server.py
├── requirements.txt
├── pyproject.toml
├── .env
└── README.md

Troubleshooting

Common Issues

  1. ODBC Driver Not Found: Install Microsoft ODBC Driver 17 for SQL Server
  2. Connection Failed: Verify server address, credentials, and network connectivity
  3. Permission Denied: Ensure database user has appropriate permissions

Testing Connection

# Test ODBC drivers
import pyodbc
print(pyodbc.drivers())

# Test basic connection
from sqlalchemy import create_engine, text
engine = create_engine('mssql+pyodbc://user@server:port/database?driver=ODBC+Driver+17+for+SQL+Server')
with engine.connect() as conn:
    result = conn.execute(text('SELECT 1'))
    print('Connection successful!')

License

MIT License - see LICENSE file for details.

Related Servers