"""
Script para probar las herramientas del servidor SQL Server MCP
Este script simula lo que Claude intentaría hacer al usar el servidor
"""
import sys
import os
# Agregar el directorio mcp_server al path
sys.path.insert(0, 'c:/Users/Melvisoft/Downloads/chatIA/mcp_server')
# Cambiar al directorio para que load_dotenv funcione
os.chdir('c:/Users/Melvisoft/Downloads/chatIA/mcp_server')
# Importar el módulo
from sql_server_mcp import get_connection, get_tables_list, get_database_schema, get_table_data, execute_sql_query
import asyncio
async def test_connection():
"""Probar la conexión básica"""
print("\n" + "="*60)
print("PRUEBA 1: Conexión Básica")
print("="*60)
try:
conn = get_connection()
print("✓ Conexión establecida exitosamente")
conn.close()
print("✓ Conexión cerrada correctamente")
return True
except Exception as e:
print(f"✗ Error: {str(e)}")
return False
async def test_get_tables():
"""Probar obtener lista de tablas"""
print("\n" + "="*60)
print("PRUEBA 2: Obtener Lista de Tablas")
print("="*60)
try:
result = await get_tables_list()
if result.get("success"):
print(f"✓ Encontradas {result['total_tables']} tablas")
print("\nPrimeras 10 tablas:")
for table in result['tables'][:10]:
print(f" - {table['name']} ({table['columns']} columnas)")
return True
else:
print(f"✗ Error: {result.get('error')}")
return False
except Exception as e:
print(f"✗ Error: {str(e)}")
return False
async def test_simple_query():
"""Probar una consulta SQL simple"""
print("\n" + "="*60)
print("PRUEBA 3: Consulta SQL Simple")
print("="*60)
try:
result = await execute_sql_query("SELECT @@VERSION AS Version")
if result.get("success"):
print("✓ Consulta ejecutada exitosamente")
print(f" Filas retornadas: {result['row_count']}")
if result['results']:
print(f" Versión SQL Server: {result['results'][0].get('Version', 'N/A')[:80]}...")
return True
else:
print(f"✗ Error: {result.get('error')}")
return False
except Exception as e:
print(f"✗ Error: {str(e)}")
return False
async def test_table_data():
"""Probar obtener datos de una tabla"""
print("\n" + "="*60)
print("PRUEBA 4: Obtener Datos de Tabla")
print("="*60)
try:
# Primero obtener una tabla que exista
tables_result = await get_tables_list()
if not tables_result.get("success") or not tables_result.get("tables"):
print("✗ No se pudieron obtener las tablas")
return False
# Usar la primera tabla
first_table = tables_result['tables'][0]['name']
print(f"Probando con tabla: {first_table}")
result = await get_table_data(first_table, limit=5)
if result.get("success"):
print(f"✓ Datos obtenidos exitosamente")
print(f" Tabla: {result['table']}")
print(f" Columnas: {', '.join(result['columns'][:5])}...")
print(f" Filas retornadas: {result['row_count']}")
return True
else:
print(f"✗ Error: {result.get('error')}")
return False
except Exception as e:
print(f"✗ Error: {str(e)}")
return False
async def test_schema():
"""Probar obtener esquema completo"""
print("\n" + "="*60)
print("PRUEBA 5: Obtener Esquema Completo")
print("="*60)
try:
result = await get_database_schema()
if result.get("success"):
print(f"✓ Esquema obtenido exitosamente")
print(f" Base de datos: {result['database']}")
print(f" Servidor: {result['server']}")
print(f" Total de tablas: {result['table_count']}")
# Mostrar primera tabla como ejemplo
if result.get('schema'):
first_table_name = list(result['schema'].keys())[0]
first_table = result['schema'][first_table_name]
print(f"\n Ejemplo - Tabla '{first_table_name}':")
for col in first_table['columns'][:3]:
print(f" - {col['name']} ({col['type']})")
return True
else:
print(f"✗ Error: {result.get('error')}")
return False
except Exception as e:
print(f"✗ Error: {str(e)}")
return False
async def main():
print("\n" + "="*60)
print("PRUEBAS DEL SERVIDOR SQL SERVER MCP")
print("Simulando lo que Claude intentaría hacer")
print("="*60)
results = []
# Ejecutar pruebas
results.append(("Conexión Básica", await test_connection()))
results.append(("Lista de Tablas", await test_get_tables()))
results.append(("Consulta Simple", await test_simple_query()))
results.append(("Datos de Tabla", await test_table_data()))
results.append(("Esquema Completo", await test_schema()))
# Resumen
print("\n" + "="*60)
print("RESUMEN DE PRUEBAS")
print("="*60)
passed = 0
failed = 0
for test_name, result in results:
status = "✓ PASÓ" if result else "✗ FALLÓ"
color = "VERDE" if result else "ROJO"
print(f"{test_name:30} {status}")
if result:
passed += 1
else:
failed += 1
print("\n" + "-"*60)
print(f"Total: {passed} pasaron, {failed} fallaron")
print("-"*60)
if failed == 0:
print("\n✓ TODAS LAS PRUEBAS PASARON")
print("El servidor SQL Server MCP está funcionando correctamente.")
print("Si Claude reporta errores, copia el mensaje exacto del error.")
else:
print("\n✗ ALGUNAS PRUEBAS FALLARON")
print("Revisa los errores anteriores para diagnosticar el problema.")
print("Consulta: docs/SQL_SERVER_MCP_TROUBLESHOOTING.md")
return 0 if failed == 0 else 1
if __name__ == "__main__":
exit_code = asyncio.run(main())
sys.exit(exit_code)