Hace unos días terminé haciendo algo que probablemente muchos desarrolladores hacemos cuando estamos probando una idea: buscar datos, juntarlos y empezar a jugar con ellos.
En este caso, la búsqueda terminó siendo bastante curiosa.
Me encontré con personas que compartían mi nombre, pero que vivían en ciudades diferentes, trabajaban en industrias completamente distintas y, en algunos casos, tenían nombres bastante más largos que el mío.
Así que terminé armando una pequeña colección de registros con nombres, ciudades y empresas.
Al principio no tenía ningún propósito especial. Simplemente quería ver qué tan fácil sería encontrar relaciones entre ellos.
Y entonces apareció una pregunta que parecía bastante sencilla:
¿Qué pasaría si en lugar de hacer yo las consultas, pudiera simplemente preguntárselo a una IA?
Normalmente, para trabajar con algo así, escribiría una consulta SQL, revisaría los resultados y después haría otra consulta para profundizar.
SELECT *
FROM Personas
WHERE Nombre LIKE '%Victor%Sosa%';
Pero esta vez quise probar algo diferente:
conectar un modelo de IA directamente con SQL Server mediante MCP y dejar que el agente descubriera cómo consultar los datos.
Ahí fue donde apareció MCP.
Y sí… la idea empezó con un inocente:
“Busca todos los Victor Sosa.”
Y terminó siendo bastante más interesante.
MCP + SQL Server
MCP, o Model Context Protocol, permite que un modelo de IA descubra y utilice herramientas externas.
En este caso, la arquitectura queda más o menos así:

Pero aquí hay una diferencia importante.
No vamos a darle al modelo acceso directo a SQL Server.
Vamos a utilizar el SQL MCP Server de Microsoft, que forma parte de Data API Builder desde la versión 1.7 y que actualmente cuenta con la línea 2.0. Microsoft lo diseñó precisamente para que agentes de IA puedan trabajar con datos mediante una superficie controlada de herramientas, permisos y entidades (documentación oficial).
Y esto me gusta mucho más que simplemente darle a una IA un usuario y contraseña de SQL Server.
¿Qué vamos a construir?
Un pequeño laboratorio.
Tendremos una base:
PersonasDB
llena con nombres que me dio Google, como:
Victor Sosa
Víctor Hugo Sosa
Víctor Hugo Sosa Esquivel
Víctor Hugo Badillo Sosa
Víctor Adrián Sosa Hernández
Victor Manuel Sosa Piña
Victor Manuel Sosa Hernández
Victor Manuel Sosa Guzmán
Victor Manuel Sosa
Victor Manuel Sosa Moscoso
Victor Manuel Sosa Estrada
Victor Manuel Sosa León
Victor Manuel Sosa Valenzuela
Victor Sosa Toledo
Después conectaremos SQL Server con el SQL MCP Server de Microsoft.
Y finalmente podremos preguntarle a la IA cosas como:
¿Qué personas tienen nombres similares a Victor Sosa?
o:
Busca todos los posibles homónimos de Victor Sosa y agrúpalos por similitud.
La gracia es que nosotros no tendremos que escribir la consulta SQL.
1. Lo que necesitamos
Para este laboratorio necesitamos:
- SQL Server 2016 o superior
- .NET 9 o superior
- Data API Builder
- Visual Studio Code
- GitHub Copilot Chat u otro cliente compatible con MCP
Microsoft utiliza precisamente estos requisitos en su quickstart actual para SQL MCP Server (quickstart).
Si ya tienes .NET instalado, primero puedes comprobarlo:
dotnet --version
La versión debe ser 9.0 o superior.
2. Crear nuestro proyecto
Creamos una carpeta:
mkdir sql-mcp-demo
cd sql-mcp-demo
Y creamos un manifiesto local para la herramienta de .NET:
dotnet new tool-manifest
Ahora instalamos Data API Builder:
dotnet tool install microsoft.dataapibuilder
Y restauramos las herramientas:
dotnet tool restore
Podemos comprobar que DAB está disponible:
dotnet tool run dab --version
Microsoft distribuye SQL MCP Server como parte de Data API Builder; no estamos instalando un servidor MCP de terceros (notas de la versión 1.7).
3. Crear nuestra base de datos
Ahora viene la parte importante.
Vamos a crear una base de datos de laboratorio.
CREATE DATABASE PersonasDB;
GO
USE PersonasDB;
GO
CREATE TABLE dbo.Personas
(
Id INT IDENTITY PRIMARY KEY,
Nombre NVARCHAR(150) NOT NULL,
Ciudad NVARCHAR(100),
Profesion NVARCHAR(150)
);
GO
Y así quedó la base, llena con los nombres que me dio Google:
INSERT INTO dbo.Personas
(Nombre, Ciudad, Profesion)
VALUES
('Victor Sosa', 'Monterrey', ''),
('Victor Sosa', 'Querétaro', 'FieldCore'),
('Victor Sosa', 'Querétaro', 'CONTACT Automation'),
('Victor Sosa', 'Playa del Carmen', 'Mayakoba Experiences'),
('Victor Sosa', 'Chihuahua', 'Signify'),
('Victor Sosa', 'Mérida', 'Magnon Group'),
('Victor Sosa', 'Aguascalientes', 'Bachoco'),
('Victor Sosa', 'Saltillo', 'Woodbridge'),
('Victor Sosa', 'CDMX', 'Copachisa'),
('Victor Sosa', 'Zamora, Michoacán', ''),
('Victor Sosa', 'Tamaulipas', ''),
('Victor Sosa', 'Torreón', ''),
('Victor Sosa', 'Apatzingán', 'Tecnología'),
('Victor Sosa', 'Acapulco', 'Integrity Mexico'),
('Victor Sosa', 'CDMX', 'Comunicación / diseño estratégico'),
('Victor Sosa', 'CDMX', 'BBVA'),
('Victor Sosa', 'CDMX', 'Industrial Proximity Services'),
('Víctor Adrián Sosa Hernández', 'CDMX', 'Tecnológico de Monterrey / IA / Ciencias Computacionales'),
('Victor Manuel Sosa Piña', 'Iztapalapa, CDMX', 'HITSS México'),
('Victor Manuel Sosa Hernández', 'CDMX', 'GNP Seguros'),
('Victor Manuel Sosa Guzmán', 'Benito Juárez, CDMX', 'Sam''s Club México'),
('Victor Manuel Sosa', 'Toluca', 'FIRA'),
('Victor Manuel Sosa', 'Oaxaca', ''),
('Victor Manuel Sosa', 'San Luis Potosí', ''),
('Victor Manuel Sosa', 'Puebla', 'COBAEP'),
('Victor Manuel Sosa', 'Monclova', 'Maxion Inmagusa'),
('Victor Manuel Sosa Moscoso', 'Palenque, Chiapas', 'Profesional independiente'),
('Victor Manuel Sosa Estrada', 'Guadalajara', ''),
('Victor Manuel Sosa León', 'Zumpango', 'SEGU S.A. de C.V.'),
('Victor Manuel Sosa Valenzuela', 'Taipei', 'TutorABC'),
('Victor Manuel Sosa', 'Gainesville, Florida', 'King Risk Partners'),
('Victor Manuel Sosa', 'Bogotá', 'Concentrix'),
('Victor Manuel Sosa', 'España', 'PUBLICOM'),
('Victor Manuel Sosa', 'Argentina', 'Radio del Plata San Luis'),
('Víctor Hugo Sosa', 'CDMX', 'Contratista'),
('Víctor Hugo Sosa Esquivel', 'Monterrey', 'Exel del Norte'),
('Victor Sosa Toledo', 'CDMX', 'PepsiCo'),
('Victor Gabriel Mares Sosa', 'Iztacalco', 'Corteva Agriscience'),
('Victor Adán Sosa Luna', 'Benito Juárez, CDMX', 'Linguatec México'),
('Víctor Hugo Badillo Sosa', 'Faja de Oro', 'GSisTI'),
('Víctor Raúl Reyes Sosa', 'Orizaba', 'Rovianda'),
('Víctor Sosa Martínez', 'París', 'Max Mara Fashion Group'),
('Victor Zapata-Sosa', 'Jersey City, NJ', 'Revlon'),
('Victor Sosa', 'Carrollton, Texas', 'Safran Helicopter Engines USA'),
('Victor Sosa', 'Boynton Beach, Florida', 'Caperion Computing'),
('Victor Sosa', 'Salinas, California', 'Language Access Consultant'),
('Victor Sosa', 'Durham, New Hampshire', 'University of New Hampshire'),
('Victor Sosa', 'Greensboro, North Carolina', 'The Lane Construction Corporation'),
('Victor Sosa', 'Fort Worth, Texas', 'CEC'),
('Victor Sosa', 'Salt Lake City', 'TireHub'),
('Victor Sosa', 'Toronto', 'Rogers Communications'),
('Victor Sosa', 'São Paulo', 'BTG Pactual'),
('Victor Sosa', 'Buenos Aires', 'SecurityPack'),
('Victor Sosa', 'Argentina', 'President Energy PLC'),
('Victor Sosa', 'Argentina', 'Empresa Nueve de Julio S.A.T.'),
('Victor Sosa', 'Dallas, Texas', 'vsvideoservices'),
('Victor Sosa', 'Paraguay', 'Banco Atlas'),
('Victor Sosa', 'Paraguay', 'Banco Interamericano de Desarrollo'),
('Victor Sosa', 'Paraguay', 'Benini Transporte y Logística'),
('Victor Sosa', 'Paraguay', 'Tafirel Paraguay'),
('Victor Sosa', 'Paraguay', 'ASM Paraguay'),
('Victor Sosa', 'Honduras', 'CVS'),
('Victor Sosa', 'Brasil', 'Sosa Perícia'),
('Victor Sosa', 'Buenos Aires', 'Millanel Cosmética'),
('Victor Sosa', 'Hartford, Connecticut', 'Pratt & Whitney'),
('Victor Sosa', 'Hawthorne, New Jersey', 'Ohm Labs'),
('Victor Sosa', 'Atibaia, Brasil', 'Uniexame'),
('Victor Sosa', 'Milwaukee', 'La Causa'),
('Victor Sosa', 'Philadelphia', 'FINRA'),
('Victor Sosa', 'Phoenix', 'Choice Hotels International'),
('Victor Sosa', 'Edwards, Colorado', ''),
('Victor Sosa', 'Lafayette, Louisiana', ''),
('Victor Sosa', 'San Miguel', 'ITLS');
GO
Y aquí empieza nuestro pequeño experimento.
4. Configurar Data API Builder
Ahora inicializamos la configuración:
dotnet tool run dab init \
--database-type mssql \
--connection-string "<TU_CONNECTION_STRING>" \
--config dab-config.json \
--host-mode development
Esto genera:
dab-config.json
Ese archivo es fundamental.
Aquí definimos la conexión y, sobre todo, qué entidades puede utilizar nuestro agente.
La documentación de Microsoft recomienda precisamente utilizar el archivo de configuración de DAB como punto central para conexiones, entidades, permisos y capacidades MCP (documentación oficial).
5. No vamos a exponer toda la base
Y aquí está una de las cosas que más me gustan de esta implementación.
No queremos esto:

Queremos esto:

Por ejemplo, podemos exponer:
Personas
pero dejar fuera:
Usuarios
Credenciales
Pagos
InformaciónConfidencial
La configuración de DAB utiliza entidades y permisos para determinar qué puede consultar el agente. SQL MCP Server hereda esa misma capa de control (documentación oficial).
6. Activar MCP
En dab-config.json habilitamos MCP:
{
"runtime": {
"mcp": {
"enabled": true
}
}
}
Y configuramos nuestra entidad Personas.
La idea es que DAB conozca:

Además podemos agregar descripciones semánticas.
Por ejemplo:
Nombre:
"Nombre completo de la persona"
Ciudad:
"Ciudad donde reside la persona"
Profesion:
"Profesión u ocupación de la persona"
Esto parece un detalle menor.
No lo es.
Estamos dándole contexto al agente sobre nuestros datos.
Microsoft recomienda precisamente agregar descripciones semánticas para ayudar a los modelos a interpretar correctamente las entidades y sus campos (documentación oficial).
7. ¿Qué herramientas recibe la IA?
Aquí viene algo interesante.
SQL MCP Server no simplemente le entrega SQL libre al modelo.
En su versión actual expone una serie de herramientas DML, entre ellas:
describe_entities
read_records
create_record
update_record
delete_record
execute_entity
aggregate_records
Estas herramientas respetan la configuración, los permisos y las políticas definidas en Data API Builder (documentación oficial).
Esto significa que el modelo trabaja con una interfaz controlada, no con una conexión directa e irrestricta a SQL Server.
8. Conectarlo con Visual Studio Code
Para este laboratorio podemos utilizar el transporte stdio.
La ventaja es que VS Code puede administrar directamente el proceso de DAB.
Creamos:
.vscode/mcp.json
Y configuramos el servidor:
{
"servers": {
"sql-mcp-server": {
"type": "stdio",
"command": "dab",
"args": [
"start",
"--mcp-stdio",
"role:anonymous",
"--config",
"${workspaceFolder}/dab-config.json"
]
}
}
}
El quickstart oficial de Microsoft utiliza este enfoque para ejecutar SQL MCP Server localmente desde VS Code (quickstart).
9. Encender el MCP
Abrimos el proyecto en VS Code.
Después:
Ctrl + Shift + P
y buscamos:
MCP: List Servers
Deberíamos encontrar:
sql-mcp-server
Lo iniciamos.
Una vez conectado, VS Code puede descubrir las herramientas que proporciona el servidor.
Entre ellas encontraremos herramientas como:
describe_entities
read_records
dependiendo de nuestra configuración (quickstart).
10. Primera conversación con nuestra base
Ahora abrimos Copilot Chat.
Y en lugar de escribir SQL…
preguntamos:
¿Qué información tienes disponible en la base de datos?
El agente puede utilizar MCP para descubrir las entidades disponibles.
Después:
¿Qué campos tiene la entidad Personas?
Y finalmente:
Muéstrame las personas cuyo nombre contiene Victor.
La IA puede decidir utilizar read_records.
Nosotros no escribimos el SQL.
Estamos hablando con el agente.
11. Ahora sí…
Llegó el momento.
Le preguntamos:
Busca todos los posibles homónimos de Victor Sosa.
Y podemos pedirle algo más:
No busques solamente coincidencias exactas. Considera también variantes del nombre y explícame por qué cada registro podría ser un posible homónimo.
Podríamos obtener algo parecido a:
Coincidencia exacta: 47
Victor Sosa — Monterrey
Victor Sosa — Querétaro · FieldCore
Victor Sosa — Querétaro · CONTACT Automation
...
Victor Hugo Sosa: 3
Víctor Hugo Sosa — CDMX · Contratista
Víctor Hugo Sosa Esquivel — Monterrey · Exel del Norte
Víctor Hugo Badillo Sosa — Faja de Oro · GSisTI
Victor Sosa Hernández: 1
Víctor Adrián Sosa Hernández — CDMX · Tecnológico de Monterrey / IA / Ciencias Computacionales
Victor Manuel Sosa: 16
Victor Manuel Sosa Piña — Iztapalapa, CDMX · HITSS México
Victor Manuel Sosa Hernández — CDMX · GNP Seguros
...
Otras variantes: 6
Victor Sosa Toledo — CDMX · PepsiCo
Victor Gabriel Mares Sosa — Iztacalco · Corteva Agriscience
...
El agente agrupó los 73 registros por similitud de nombre.
Y aquí es donde empieza a ponerse interesante.
SQL recupera. La IA interpreta.
Una consulta tradicional podría hacer:
WHERE Nombre LIKE '%Victor%Sosa%'
Pero el agente puede hacer algo diferente.
Puede consultar los registros disponibles y después razonar sobre ellos.
Por ejemplo:

No significa que el modelo sepa que dos personas son la misma persona.
Y aquí hay que tener cuidado.
Un nombre similar no demuestra identidad.
El experimento solamente busca posibles homónimos.
12. Y podemos seguir preguntando
Por ejemplo:
¿Cuántos posibles homónimos encontraste?
Después:
¿En qué ciudades viven?
Después:
¿Cuáles tienen profesiones relacionadas con tecnología?
Y finalmente:
Hazme un resumen de los posibles homónimos de Victor Sosa.
Todo esto sin que nosotros escribamos manualmente cada consulta.
Los Victor Sosa del mundo
Y aquí está lo curioso: no son tres ni cuatro. Encontré 73 Victor Sosa en distintos países, cada uno con su propia historia, ciudad y empresa.
| Nombre | Lugar | Empresa / actividad |
|---|---|---|
| Victor Sosa | Monterrey | — |
| Victor Sosa | Querétaro | FieldCore |
| Victor Sosa | Querétaro | CONTACT Automation |
| Victor Sosa | Playa del Carmen | Mayakoba Experiences |
| Victor Sosa | Chihuahua | Signify |
| Victor Sosa | Mérida | Magnon Group |
| Victor Sosa | Aguascalientes | Bachoco |
| Victor Sosa | Saltillo | Woodbridge |
| Victor Sosa | CDMX | Copachisa |
| Victor Sosa | Zamora, Michoacán | — |
| Victor Sosa | Tamaulipas | — |
| Victor Sosa | Torreón | — |
| Victor Sosa | Apatzingán | Tecnología |
| Victor Sosa | Acapulco | Integrity Mexico |
| Victor Sosa | CDMX | Comunicación / diseño estratégico |
| Victor Sosa | CDMX | BBVA |
| Victor Sosa | CDMX | Industrial Proximity Services |
| Víctor Adrián Sosa Hernández | CDMX | Tecnológico de Monterrey / IA / Ciencias Computacionales |
| Victor Manuel Sosa Piña | Iztapalapa, CDMX | HITSS México |
| Victor Manuel Sosa Hernández | CDMX | GNP Seguros |
| Victor Manuel Sosa Guzmán | Benito Juárez, CDMX | Sam’s Club México |
| Victor Manuel Sosa | Toluca | FIRA |
| Victor Manuel Sosa | Oaxaca | — |
| Victor Manuel Sosa | San Luis Potosí | — |
| Victor Manuel Sosa | Puebla | COBAEP |
| Victor Manuel Sosa | Monclova | Maxion Inmagusa |
| Victor Manuel Sosa Moscoso | Palenque, Chiapas | Profesional independiente |
| Victor Manuel Sosa Estrada | Guadalajara | — |
| Victor Manuel Sosa León | Zumpango | SEGU S.A. de C.V. |
| Victor Manuel Sosa Valenzuela | Taipei | TutorABC |
| Victor Manuel Sosa | Gainesville, Florida | King Risk Partners |
| Victor Manuel Sosa | Bogotá | Concentrix |
| Victor Manuel Sosa | España | PUBLICOM |
| Victor Manuel Sosa | Argentina | Radio del Plata San Luis |
| Víctor Hugo Sosa | CDMX | Contratista |
| Víctor Hugo Sosa Esquivel | Monterrey | Exel del Norte |
| Victor Sosa Toledo | CDMX | PepsiCo |
| Victor Gabriel Mares Sosa | Iztacalco | Corteva Agriscience |
| Victor Adán Sosa Luna | Benito Juárez, CDMX | Linguatec México |
| Víctor Hugo Badillo Sosa | Faja de Oro | GSisTI |
| Víctor Raúl Reyes Sosa | Orizaba | Rovianda |
| Víctor Sosa Martínez | París | Max Mara Fashion Group |
| Victor Zapata-Sosa | Jersey City, NJ | Revlon |
| Victor Sosa | Carrollton, Texas | Safran Helicopter Engines USA |
| Victor Sosa | Boynton Beach, Florida | Caperion Computing |
| Victor Sosa | Salinas, California | Language Access Consultant |
| Victor Sosa | Durham, New Hampshire | University of New Hampshire |
| Victor Sosa | Greensboro, North Carolina | The Lane Construction Corporation |
| Victor Sosa | Fort Worth, Texas | CEC |
| Victor Sosa | Salt Lake City | TireHub |
| Victor Sosa | Toronto | Rogers Communications |
| Victor Sosa | São Paulo | BTG Pactual |
| Victor Sosa | Buenos Aires | SecurityPack |
| Victor Sosa | Argentina | President Energy PLC |
| Victor Sosa | Argentina | Empresa Nueve de Julio S.A.T. |
| Victor Sosa | Dallas, Texas | vsvideoservices |
| Victor Sosa | Paraguay | Banco Atlas |
| Victor Sosa | Paraguay | Banco Interamericano de Desarrollo |
| Victor Sosa | Paraguay | Benini Transporte y Logística |
| Victor Sosa | Paraguay | Tafirel Paraguay |
| Victor Sosa | Paraguay | ASM Paraguay |
| Victor Sosa | Honduras | CVS |
| Victor Sosa | Brasil | Sosa Perícia |
| Victor Sosa | Buenos Aires | Millanel Cosmética |
| Victor Sosa | Hartford, Connecticut | Pratt & Whitney |
| Victor Sosa | Hawthorne, New Jersey | Ohm Labs |
| Victor Sosa | Atibaia, Brasil | Uniexame |
| Victor Sosa | Milwaukee | La Causa |
| Victor Sosa | Philadelphia | FINRA |
| Victor Sosa | Phoenix | Choice Hotels International |
| Victor Sosa | Edwards, Colorado | — |
| Victor Sosa | Lafayette, Louisiana | — |
| Victor Sosa | San Miguel | ITLS |
Hay Victor Sosa en Monterrey, en Querétaro, en Paraguay, en São Paulo, hasta en Taipei. Y todos comparten el mismo nombre.
Lo realmente interesante de MCP
Para mí, la parte más interesante no es encontrar a los Victor Sosa.
Eso solamente es el pretexto. 😂
Lo interesante es el cambio de paradigma.
Antes:

Ahora podemos tener:

Y el agente decide qué herramienta necesita utilizar.
Eso es justamente una de las ideas fuertes detrás de MCP: permitir que los modelos descubran y utilicen herramientas externas mediante un protocolo estándar (documentación oficial).
¿Y qué pasa con NL2SQL?
Aquí hay otra cosa que me llamó mucho la atención.
Uno podría pensar:
“Entonces la IA genera SQL.”
Pero SQL MCP Server de Microsoft deliberadamente no utiliza NL2SQL como mecanismo principal.
En lugar de pedirle al modelo que genere SQL arbitrario, utiliza la abstracción de entidades de Data API Builder y su Query Builder para producir consultas T-SQL de forma determinista (documentación oficial).
Y eso tiene bastante sentido.
Porque una cosa es:
“Genera un SELECT.”
Y otra:
“Permite que un agente opere sobre datos empresariales.”
Cuando hablamos de producción, la segunda necesita controles.
¿Podríamos hacerlo con un modelo local?
Sí.
Y aquí es donde el experimento se pone todavía más interesante.
SQL MCP Server es compatible con clientes MCP y Microsoft también documenta su utilización con modelos locales mediante herramientas como Ollama (documentación oficial).
Entonces podríamos terminar con algo así:

Y ahí tenemos un agente capaz de consultar nuestros datos sin enviar esos datos a un modelo externo.
Pero hay una regla
No hagas esto con producción:

😂
La implementación de Microsoft está pensada precisamente para trabajar con entidades, permisos, roles y políticas.
Para un laboratorio:

Mucho mejor.
Y cuando pasemos a producción:
mínimo privilegio, autenticación, separación de ambientes y monitoreo.
SQL MCP Server además incorpora telemetría mediante OpenTelemetry para rastrear las operaciones realizadas a través de MCP (documentación oficial).
Y todo empezó con algo bastante simple
“Buscar datos, juntarlos y empezar a jugar con ellos.”
Quién iba a decir que una búsqueda inocente iba a terminar en un laboratorio de MCP con SQL Server.
Pero terminó mostrando algo mucho más interesante:
un agente de IA puede interactuar con nuestros datos mediante herramientas, sin que tengamos que convertir cada pregunta en una consulta SQL escrita manualmente.
Y eso cambia bastante la forma en que podemos imaginar las aplicaciones empresariales.
Porque quizá el futuro no sea:
“La IA escribe SQL por nosotros.”
Quizá sea:
“La IA utiliza herramientas seguras para trabajar con nuestros sistemas.”
Y ahí es donde MCP empieza a ponerse realmente interesante.