Python MSSQL MCP Server

Un servidor MCP en Python para Microsoft SQL Server, que permite la inspección de esquemas y la ejecución de consultas SQL.

Documentación

Python MSSQL MCP Server

Version Python MCP FastAPI License

Una implementación de servidor del Model Context Protocol en Python que proporciona acceso a bases de datos de Microsoft SQL Server. Este servidor permite a los Modelos de Lenguaje inspeccionar esquemas de tablas y ejecutar consultas SQL a través de una interfaz estandarizada.

Características

Funcionalidad Principal

  • Operación asíncrona usando asyncio de Python
  • Configuración basada en variables de entorno usando python-dotenv
  • Sistema de registro (logging) integral
  • Pooling y gestión de conexiones mediante pyodbc
  • Manejo de errores y recuperación
  • Integración con FastAPI para endpoints de API
  • Modelos Pydantic para validación de datos
  • Gestión de conexiones MSSQL con ODBC Driver

Requisitos Previos

  • Python 3.x
  • Paquetes de Python requeridos:
    • pyodbc
    • pydantic
    • python-dotenv
    • mcp-server
  • ODBC Driver 17 para SQL Server

Instalación

git clone https://github.com/amornpan/py-mcp-mssql.git
cd py-mcp-mssql
pip install -r requirements.txt

Capturas de Pantalla

MCP MSSQL Server Demo

La captura de pantalla anterior muestra el servidor en uso con Claude para analizar y visualizar datos SQL.

Estructura del Proyecto

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

Explicación de la Estructura de Directorios

  • src/mssql/ - Directorio principal del código fuente
    • __init__.py - Inicialización del paquete
    • server.py - Implementación principal del servidor
  • tests/ - Directorio de archivos de prueba
    • __init__.py - Inicialización del paquete de pruebas
    • test_mssql.py - Pruebas de funcionalidad MSSQL
    • test_packages.py - Pruebas de dependencias del paquete
  • .env - Archivo de configuración de entorno (no en git)
  • .env.example - Ejemplo de configuración de entorno
  • .gitignore - Reglas de ignorado de Git
  • README.md - Documentación del proyecto
  • requirements.txt - Dependencias del proyecto

Configuración

Cree un archivo .env en la raíz del proyecto:

MSSQL_SERVER=your_server
MSSQL_DATABASE=your_database
MSSQL_USER=your_username
MSSQL_PASSWORD=your_password
MSSQL_DRIVER={ODBC Driver 17 for SQL Server}

Detalles de Implementación de la API

Listado de Recursos

@app.list_resources()
async def list_resources() -> list[Resource]
  • Lista todas las tablas disponibles en la base de datos
  • Devuelve nombres de tablas con URIs en el formato mssql://<table_name>/data
  • Incluye descripciones de tablas y tipos MIME

Lectura de Recursos

@app.read_resource()
async def read_resource(uri: AnyUrl) -> str
  • Lee datos de la tabla especificada
  • Acepta URIs en el formato mssql://<table_name>/data
  • Devuelve las primeras 100 filas en formato CSV
  • Incluye encabezados de columnas

Ejecución de SQL

@app.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]
  • Ejecuta consultas SQL
  • Admite consultas SELECT y de modificación
  • Devuelve resultados en formato CSV para consultas SELECT
  • Devuelve el número de filas afectadas para consultas de modificación

Uso con Claude Desktop

Agregue a su configuración de Claude Desktop:

En MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json En 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}"
      }
    }
  }
}

Manejo de Errores

El servidor implementa un manejo integral de errores para:

  • Fallos de conexión a la base de datos
  • Consultas SQL inválidas
  • Errores de acceso a recursos
  • Validación de URIs
  • Errores de ejecución de herramientas

Todos los errores se registran y se devuelven con mensajes de error apropiados.

Características de Seguridad

  • Configuración basada en variables de entorno
  • Seguridad de la cadena de conexión
  • Límites de tamaño del conjunto de resultados
  • Validación de entrada mediante Pydantic
  • Manejo adecuado de consultas SQL

Información de Contacto

Amornpan Phornchaicharoen

Email LinkedIn HuggingFace GitHub

No dude en contactarme si tiene alguna pregunta sobre este proyecto o desea colaborar.


Hecho con ❤️ por Amornpan Phornchaicharoen

Licencia

Este proyecto está licenciado bajo la Licencia MIT; consulte el archivo LICENSE para más detalles.

Autor

Amornpan Phornchaicharoen

Contribuciones

  1. Haga un fork del repositorio
  2. Cree su rama de características (git checkout -b feature/amazing-feature)
  3. Haga commit de sus cambios (git commit -m 'Add some amazing feature')
  4. Haga push a la rama (git push origin feature/amazing-feature)
  5. Abra un Pull Request

Requisitos

Cree un archivo requirements.txt con:

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

Estas versiones han sido probadas y verificadas para funcionar juntas. Los componentes clave son:

  • fastapi y uvicorn para el servidor de API
  • pydantic para validación de datos
  • pyodbc para conectividad con SQL Server
  • mcp para la implementación del Model Context Protocol
  • python-dotenv para configuración de entorno
  • anyio para soporte de E/S asíncrona

Agradecimientos

  • Equipo de Microsoft SQL Server por los controladores ODBC
  • Mantenedores de pyodbc para Python
  • Comunidad del Model Context Protocol
  • Contribuyentes al proyecto python-dotenv