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., "@MSSQL MCP Servershow me the top 10 customers by total sales"
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.
pyodbc MCP Server
A Model Context Protocol (MCP) server that provides read-only access to Microsoft SQL Server databases using Windows Authentication.
Built for environments where:
π Windows Authentication is required (no username/password storage)
π‘οΈ Read-only access is mandated by IT security policy
π₯οΈ SQL Server is accessed from Windows workstations
π€ AI assistants need safe database access (Claude Code, etc.)
π What's New in v0.4.0 (Production Ready!)
Version 0.4.0 marks the first production-ready release with:
β Published on PyPI - Simple
pip install pyodbc-mcp-serverβ Comprehensive Testing - 193 tests, 83% code coverage
β Professional Configuration - CLI args, TOML files, environment variables
β Robust Error Handling - Typed exceptions with automatic retry logic
β Complete Documentation - 4,893 lines across 5 guides (API, Config, Troubleshooting, Examples, Development)
Upgrade from pre-release versions: pip install --upgrade pyodbc-mcp-server
Features
Windows Authentication - Uses
Trusted_Connectionvia pyodbc, no credentials to manageRead-only by design - Only SELECT queries allowed, dangerous keywords blocked
Comprehensive error handling - Typed exceptions with retry logic for transient failures
Row limiting - Prevents accidental large result sets (configurable, max 10,000)
Schema exploration - 10 tools for tables, views, indexes, constraints, relationships, and more
MCP resources - 5 URI-based endpoints for quick data access
Configurable - CLI arguments, TOML config files, or environment variables
Production-ready - Query timeouts, connection retries, comprehensive logging
Available Tools
Tool | Description |
| List all tables in the database, optionally filtered by schema |
| Get detailed column definitions, primary keys, and foreign keys |
| Execute SELECT queries with security filtering and row limits |
| Find foreign key relationships with referential actions |
| List all views in the database, optionally filtered by schema |
| List all indexes for a specific table with metadata |
| List all constraints (PK, FK, unique, check, default) |
| List all stored procedures, optionally filtered by schema |
| List all user-defined functions, optionally filtered by schema |
| List all triggers with table association and status |
See
Installation
π Quick Install (Recommended)
The package is available on PyPI and ready for production use:
That's it! The server is now available as the pyodbc-mcp-server command.
π¦ Latest Release: v0.4.0 (Production Ready) π Full Documentation: docs/ π PyPI Package: pypi.org/project/pyodbc-mcp-server
Prerequisites
Python 3.10+ (tested on 3.10, 3.11, 3.12)
Windows with ODBC Driver 17+ for SQL Server
Network access to your SQL Server
Windows domain account with SELECT permissions on target database
Install ODBC Driver (if needed)
If you don't have the ODBC driver installed, download Microsoft ODBC Driver 17 for SQL Server.
Alternative: Install from Source
For development or the latest unreleased features:
Configuration
Quick Configuration
The server supports three configuration methods (in priority order):
CLI Arguments (highest priority)
TOML Configuration File
Environment Variables (lowest priority)
Minimal setup with defaults:
Using TOML config file:
Override specific settings:
See
Configuration Parameters
Parameter | Default | Range | Description |
|
| - | SQL Server hostname or IP |
|
| - | Target database name |
|
| - | ODBC driver name |
|
| 1-300 | Connection timeout (seconds) |
|
| 1-3600 | Query execution timeout (seconds) |
|
| 0-10 | Max retry attempts for transient errors |
|
| 0-60 | Base retry delay (seconds, exponential backoff) |
Environment Variables
Variable | Default | Description |
|
| SQL Server hostname or IP |
|
| Target database name |
|
| ODBC driver name |
|
| Connection timeout (seconds) |
|
| Query timeout (seconds) |
|
| Max retry attempts |
|
| Base retry delay (seconds) |
Claude Code Configuration
Quick Install via CLI (Recommended)
Since the package is on PyPI, adding to Claude Code is simple:
Note: Claude Code will automatically use the PyPI package. No need to specify installation paths!
With all environment variables:
Scope options:
Verify installation:
Manual Configuration (Alternative)
Add to your ~/.claude.json (or %USERPROFILE%\.claude.json on Windows):
Note for Windows users: If you encounter issues, try wrapping with
cmd /c:"command": "cmd", "args": ["/c", "pyodbc-mcp-server"],
Claude Desktop Configuration
Add to your Claude Desktop config (%APPDATA%\Claude\claude_desktop_config.json):
Note: Since v0.4.0,
pyodbc-mcp-serveris installed as a command-line tool. For older installations, use"command": "python", "args": ["-m", "mssql_mcp_server"].
Usage Examples
Once configured, you can ask Claude to:
Explore Schema
Query Data
Analyze Relationships
Security
This server is designed with security as a primary concern:
Read-Only Enforcement
Only queries starting with
SELECTare allowedDangerous keywords are blocked even in subqueries:
INSERT,UPDATE,DELETE,DROP,CREATE,ALTEREXEC,EXECUTE,TRUNCATE,GRANT,REVOKE,DENYBACKUP,RESTORE,SHUTDOWN,DBCC
Windows Authentication
Uses
Trusted_Connection=yes- no passwords stored or transmittedLeverages existing Windows domain security
Your database permissions are enforced by SQL Server
Row Limiting
Default limit: 100 rows per query
Maximum limit: 10,000 rows per query
Prevents accidental retrieval of large datasets
Error Handling & Retry Logic
Typed Exceptions: ConnectionError, QueryError, SecurityError, ValidationError, TimeoutError
Automatic Retries: Transient errors (connection failures, timeouts, deadlocks) are retried with exponential backoff
Configurable Timeouts: Separate timeouts for connection and query execution
Consistent Error Format: All errors returned as JSON with error code, message, and details
Documentation
Comprehensive documentation is available in the docs/ directory:
Document | Description |
Complete documentation for all 11 tools and 5 resources | |
CLI arguments, TOML files, environment variables | |
Common issues and solutions | |
Example queries and use cases | |
Contributing, testing, and release process |
Development
Quick Start
Running Locally
See
Contributing
Contributions are welcome! Please see the Development Guide for:
Development setup
Architecture overview
Testing guide
Code style requirements
Adding new tools
Release process
Quick contribution checklist:
Fork the repository
Create a feature branch (
git checkout -b feature/my-feature)Make changes and add tests
Ensure tests pass and coverage doesn't decrease
Format code (
black src tests && isort src tests)Submit a pull request
License
MIT License - see LICENSE file.
Acknowledgments
Built with FastMCP for MCP protocol handling
Uses pyodbc for SQL Server connectivity
Inspired by the need for safe AI access to enterprise databases