by amornpan
A Python-based Model Context Protocol server that provides secure and standardized access to Microsoft SQL Server databases, enabling Language Models to interact with and inspect database schemas.
py-mcp-mssql is a Python-based Model Context Protocol (MCP) server designed to facilitate secure and standardized interaction with Microsoft SQL Server databases. It allows Language Models (LMs) to inspect database table schemas and execute SQL queries through a well-defined API, abstracting the complexities of direct database access.
To use py-mcp-mssql, you first need to clone the repository, install the required Python packages (pyodbc, pydantic, python-dotenv, mcp-server), and ensure you have ODBC Driver 17 for SQL Server installed. Configuration involves creating a .env
file with your MSSQL server details (server, database, user, password, driver). The server can then be integrated with applications like Claude Desktop by adding specific configurations to its mcpServers
settings, allowing the LM to communicate with your MSSQL database.
asyncio
for efficient, non-blocking database interactions..env
files using python-dotenv
.pyodbc
.SELECT
and modification SQL queries, returning results in CSV format or affected row counts.Q: What is the Model Context Protocol (MCP)? A: The Model Context Protocol is a standardized interface that allows Language Models to interact with external tools and data sources, such as databases, in a structured and secure manner.
Q: What are the prerequisites for running py-mcp-mssql? A: You need Python 3.x, specific Python packages (pyodbc, pydantic, python-dotenv, mcp-server), and ODBC Driver 17 for SQL Server.
Q: How does py-mcp-mssql ensure security? A: It incorporates features like environment variable-based configuration for credentials, connection string security, result set size limits, and input validation through Pydantic models to enhance security.
Q: Can I execute both read and write SQL queries?
A: Yes, py-mcp-mssql supports both SELECT
queries for data retrieval and modification queries (e.g., INSERT
, UPDATE
, DELETE
).
Q: How can I integrate py-mcp-mssql with my application? A: The server exposes API endpoints via FastAPI. For specific LM integrations like Claude Desktop, you can configure it to communicate with the py-mcp-mssql server using the provided JSON configuration example.
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.
asyncio
python-dotenv
git clone https://github.com/amornpan/py-mcp-mssql.git
cd py-mcp-mssql
pip install -r requirements.txt
The 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 implementationtests/
- 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 dependenciesCreate 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]
mssql://<table_name>/data
@app.read_resource()
async def read_resource(uri: AnyUrl) -> str
mssql://<table_name>/data
@app.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]
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:
All errors are logged and returned with appropriate error messages.
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
git checkout -b feature/amazing-feature
)git commit -m 'Add some amazing feature'
)git push origin feature/amazing-feature
)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:
fastapi
and uvicorn
for the API serverpydantic
for data validationpyodbc
for SQL Server connectivitymcp
for Model Context Protocol implementationpython-dotenv
for environment configurationanyio
for asynchronous I/O supportReviews feature coming soon
Stay tuned for community discussions and feedback