# 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
```bash
# 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:
```env
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
```bash
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**:
```json
{
"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:
```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:
```json
{
"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
```bash
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
```python
# 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.