MCP Server Tutorial: Cómo conectar ChatGPT a bases de datos y APIs sin ser un má
MCP Server Tutorial: Cómo conectar ChatGPT a bases de datos y APIs sin ser un mártir del código
Mira, colega, te voy a contar la movida de los MCP servers de una vez. No es magia, no es humo. Es la forma más directa de que ChatGPT deje de ser un loro y se convierta en tu asistente con acceso a datos reales. ¿Te imaginas preguntarle "dame el total de ventas del mes pasado" y que te saque el número de tu base de datos? Pues eso es un MCP server bien montado.
Vamos al lío. Un MCP (Model Context Protocol) server no es más que un intermediario que le da a la IA acceso a tus herramientas. Bases de datos, APIs, archivos locales. Lo configuras una vez y ChatGPT puede ejecutar consultas como si fuera un desarrollador junior que no se queja.
Lo que necesitas (sin florituras)
- Node.js 18+ instalado (si no lo tienes, colega, estás en 2024 sin wifi)
- Una API key de OpenAI o Anthropic (según el modelo que uses)
- Un cliente MCP (recomiendo el plugin de Claude Desktop o la extensión para VS Code)
- Un par de huevos para configurar cosas
Prompt 1: El esqueleto de un MCP server básico
npx @modelcontextprotocol/create-server mi-servidor-mcp
cd mi-servidor-mcp
npm install
Eso te genera la estructura. Luego editas src/index.ts con esto:
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = new Server({
name: 'mi-servidor-mcp',
version: '1.0.0',
}, {
capabilities: {
tools: {},
resources: {}
}
});
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('MCP server corriendo');
}
main();
Prompt 2: Conectar a una base de datos SQLite
import Database from 'better-sqlite3';
const db = new Database('datos.db');
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [{
name: 'consultar_ventas',
description: 'Obtiene ventas de los últimos 30 días',
inputSchema: {
type: 'object',
properties: {}
}
}]
}));
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === 'consultar_ventas') {
const rows = db.prepare('SELECT SUM(total) as total FROM ventas WHERE fecha > date("now", "-30 days")').get();
return { content: [{ type: 'text', text: JSON.stringify(rows) }] };
}
});
Prompt 3: Exponer una API externa (ejemplo: clima)
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [{
name: 'clima_ciudad',
description: 'Obtiene el clima actual de una ciudad',
inputSchema: {
type: 'object',
properties: {
ciudad: { type: 'string' }
},
required: ['ciudad']
}
}]
}));
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === 'clima_ciudad') {
const { ciudad } = request.params.arguments;
const response = await fetch(https://api.weatherapi.com/v1/current.json?key=TU_API_KEY&q=${ciudad});
const data = await response.json();
return { content: [{ type: 'text', text: Temperatura en ${ciudad}: ${data.current.temp_c}°C }] };
}
});
Prompt 4: Script para probar el servidor localmente
En terminal 1
npm run build && node dist/index.js
En terminal 2 (cliente MCP)
npx @modelcontextprotocol/inspector node dist/index.js
Prompt 5: Desplegar en producción con Docker
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY dist/ ./dist/
CMD ["node", "dist/index.js"]
Y luego docker build -t mi-mcp-server . && docker run -d mi-mcp-server
El truco del almendruco
Colega, aquí va la clave: los MCP servers no son para hacer cosas complejas. Son para tareas concretas, repetitivas, que una IA puede resolver si tiene acceso. No te pongas a crear un servidor que haga 50 cosas. Haz uno que haga 3 cosas bien.
Yo uso MCP servers para:
- Consultar métricas de negocio en tiempo real
- Buscar documentación técnica interna
- Ejecutar scripts de mantenimiento
¿Sabes qué es lo mejor? Que una vez configurado, no vuelves a tocar nada. La IA lo llama cuando lo necesita.
Y tú, colega, ¿qué prompt usas para conectar ChatGPT a tus datos reales?



