A Model Context Protocol server implementation in Python that provides access to Microsoft SQL Server databases. This server enables Language Models to inspect table schemas and execute SQL queries through a standardized interface.
- Asynchronous operation using Python's
asyncio - Environment-based configuration using
python-dotenv - Comprehensive logging system
- Connection pooling and management via pyodbc
- Error handling and recovery
- FastAPI integration for API endpoints
- Pydantic models for data validation
- MSSQL connection handling with ODBC Driver
- Python 3.x
- Required Python packages:
- pyodbc
- pydantic
- python-dotenv
- mcp-server
- ODBC Driver 17 for SQL Server
git clone https://github.com/amornpan/py-mcp-mssql.git cd py-mcp-mssql pip install -r requirements.txtThe screenshot above demonstrates the server being used with Claude to analyze and visualize SQL data.
PY-MCP-MSSQL/ ├── src/ │ └── mssql/ │ ├── __init__.py │ └── server.py ├── tests/ │ ├── __init__.py │ ├── test_mssql.py │ └── test_packages.py ├── .env ├── .env.example ├── .gitignore ├── README.md └── requirements.txt src/mssql/- Main source code directory__init__.py- Package initializationserver.py- Main server implementation
tests/- Test files directory__init__.py- Test package initializationtest_mssql.py- MSSQL functionality teststest_packages.py- Package dependency tests
.env- Environment configuration file (not in git).env.example- Example environment configuration.gitignore- Git ignore rulesREADME.md- Project documentationrequirements.txt- Project dependencies
Create a .env file in the project root:
MSSQL_SERVER=your_server MSSQL_DATABASE=your_database MSSQL_USER=your_username MSSQL_PASSWORD=your_password MSSQL_DRIVER={ODBC Driver 17 for SQL Server}@app.list_resources() async def list_resources() -> list[Resource]- Lists all available tables in the database
- Returns table names with URIs in the format
mssql://<table_name>/data - Includes table descriptions and MIME types
@app.read_resource() async def read_resource(uri: AnyUrl) -> str- Reads data from specified table
- Accepts URIs in the format
mssql://<table_name>/data - Returns first 100 rows in CSV format
- Includes column headers
@app.call_tool() async def call_tool(name: str, arguments: dict) -> list[TextContent]- Executes SQL queries
- Supports both SELECT and modification queries
- Returns results in CSV format for SELECT queries
- Returns affected row count for modification queries
Add to your Claude Desktop configuration:
On MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json On Windows: %APPDATA%/Claude/claude_desktop_config.json
{ "mcpServers": { "mssql": { "command": "python", "args": [ "server.py" ], "env": { "MSSQL_SERVER": "your_server", "MSSQL_DATABASE": "your_database", "MSSQL_USER": "your_username", "MSSQL_PASSWORD": "your_password", "MSSQL_DRIVER": "{ODBC Driver 17 for SQL Server}" } } } }The server implements comprehensive error handling for:
- Database connection failures
- Invalid SQL queries
- Resource access errors
- URI validation
- Tool execution errors
All errors are logged and returned with appropriate error messages.
- Environment variable based configuration
- Connection string security
- Result set size limits
- Input validation through Pydantic
- Proper SQL query handling
Feel free to reach out to me if you have any questions about this project or would like to collaborate!
Made with ❤️ by Amornpan Phornchaicharoen
This project is licensed under the MIT License - see the LICENSE file for details.
Amornpan Phornchaicharoen
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Create a requirements.txt file with:
fastapi>=0.104.1 pydantic>=2.10.6 uvicorn>=0.34.0 python-dotenv>=1.0.1 pyodbc>=4.0.35 anyio>=4.5.0 mcp==1.2.0 These versions have been tested and verified to work together. The key components are:
fastapianduvicornfor the API serverpydanticfor data validationpyodbcfor SQL Server connectivitymcpfor Model Context Protocol implementationpython-dotenvfor environment configurationanyiofor asynchronous I/O support
- Microsoft SQL Server team for ODBC drivers
- Python pyodbc maintainers
- Model Context Protocol community
- Contributors to the python-dotenv project
