Exemplo 4: MySQL
Neste exemplo conectaremos Claude Desktop a unha base de datos MySQL mediante un servidor MCP. A base de datos executarase nun contedor Docker e o servidor MCP lanzarase tamén con Docker Compose cando Claude o necesite.
O resultado será que poderemos facer preguntas sobre os datos utilizando linguaxe natural, sen escribir directamente as consultas SQL.
Este é un MCP local. O servidor execútase no noso equipo mediante Docker e require Claude Desktop.
O exemplo utiliza o contrasinal abc123 directamente no ficheiro Compose para
simplificar a práctica. Non uses este contrasinal nin publiques a configuración
deste exemplo nun entorno real.
Requisitos
Necesitamos:
- Claude Desktop instalado;
- Docker instalado e en funcionamento;
- o comando
docker composedispoñible; - unha máquina Linux ou un contorno compatible con Docker Desktop.
O procedemento para engadir servidores MCP á aplicación está explicado en Claude Desktop e MCP.
Crear o proxecto
Creamos un cartafol para o exemplo e, dentro del, outro cartafol chamado
init:
mkdir -p ~/mcp-mysql/init
cd ~/mcp-mysql
O cartafol init conterá un script SQL que MySQL executará a primeira vez que
se cree a base de datos.
Datos iniciais
Creamos init/01-aula.sql, que debe ser un script que cree as táboas, o usuario
e engada rexistros.
O usuario profesor_mcp só terá permisos de lectura. Así evitamos que as
consultas de proba poidan modificar os datos da práctica.
Os scripts de init só se executan cando MySQL crea unha base de datos nova.
Se xa existe o volume mysql_data, os cambios posteriores no script non se
aplicarán automaticamente.
Ficheiro Compose
Creamos compose.yaml no cartafol mcp-mysql:
services:
mysql:
image: mysql:8.4
container_name: mcp-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: abc123
MYSQL_DATABASE: aula_mcp
ports:
- '127.0.0.1:3307:3306'
volumes:
- mysql_data:/var/lib/mysql
- ./init:/docker-entrypoint-initdb.d:ro
healthcheck:
test:
- CMD-SHELL
- 'mysqladmin ping -h 127.0.0.1 -uroot -pabc123 --silent'
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
mcp:
image: souhardyak/mcp-db-server:1.3.1
profiles:
- claude
environment:
DATABASE_URL: 'mysql+aiomysql://profesor_mcp:abc123@mysql:3306/aula_mcp?charset=utf8mb4'
PYTHONUNBUFFERED: '1'
depends_on:
mysql:
condition: service_healthy
restart: 'no'
volumes:
mysql_data:
O servizo mysql publica o porto 3307 só no equipo local. Dentro da rede de
Compose, o servidor MCP accede á base de datos usando o nome do servizo,
mysql, e o porto interno 3306. O contrasinal aparece directamente no
Compose porque este é un exemplo sinxelo para un contorno de prácticas.
O servizo mcp ten o perfil claude, polo que non se inicia cando levantamos
só a base de datos. Claude lanzarao despois co comando definido na súa
configuración.
Iniciar MySQL
Desde ~/mcp-mysql, iniciamos a base de datos en segundo plano:
docker compose up -d
Comprobamos que o contedor está funcionando:
docker compose ps
O estado de mysql debe aparecer como healthy. A comprobación é importante
porque o servidor MCP non debe tentar conectarse antes de que MySQL estea listo.
Configurar Claude Desktop
Abrimos o ficheiro claude_desktop_config.json desde Axustes →
Desarrollador → Editar configuración e engadimos o servidor dentro de
mcpServers:
{
"mcpServers": {
"database-server": {
"command": "/usr/bin/docker",
"args": [
"compose",
"-f",
"/home/user/mcp-mysql/compose.yaml",
"--profile",
"claude",
"run",
"--rm",
"-T",
"mcp"
]
}
}
}
Debemos cambiar /home/user/mcp-mysql/compose.yaml pola ruta absoluta onde
gardamos o noso ficheiro compose.yaml. A ruta do comando docker tamén pode
ser diferente segundo o sistema; podemos consultala con:
which docker
O comando fai o seguinte:
compose -f ...selecciona o proxecto e o ficheiro Compose;--profile claudeactiva o servizomcpdefinido para Claude;run --rm -T mcpcrea un contedor temporal para o servidor MCP e eliminao ao rematar;-Tevita asignar un terminal, porque a comunicación MCP utiliza a entrada e saída estándar do proceso.
Gardamos o ficheiro e reiniciamos completamente Claude Desktop. Ao volver
abrilo, o conector database-server debe aparecer entre os conectores MCP.
Consultas de proba
Podemos comezar cunha pregunta sinxela:
Que táboas existen na base de datos?
Despois podemos probar consultas sobre os datos:
- Cantos alumnos hai?
- Mostra os alumnos ordenados polo seu nome.
- Cantos alumnos hai en cada ciclo?
- Que alumnos están no segundo curso?
- Cal é o número medio de alumnos por curso?
Claude debería solicitar permiso antes de utilizar a ferramenta do servidor MCP. Revisamos a operación e aceptámola se a consulta é de lectura e corresponde ao que pedimos.

Deter a práctica
Para deter o contedor de MySQL sen eliminar os datos usamos:
docker compose stop mysql
Para eliminalo xunto coa rede do proxecto usamos:
docker compose down
O volume mysql_data consérvase por defecto. Para comezar de novo cos datos
iniciais, eliminando tamén o volume, usamos down -v:
docker compose down -v
docker compose down -v elimina o volume da base de datos. Utilízao só cando
queiras borrar os datos da práctica e executar novamente os scripts de
inicialización.
Resumo
- MySQL e o servidor MCP execútanse en contedores Docker separados.
- Compose inicia o servidor MCP só cando Claude o solicita mediante o perfil
claude. - Os contedores comunícanse usando o nome do servizo
mysqle o porto interno3306. - O volume
mysql_dataconserva a base de datos entre reinicios. - O usuario do exemplo ten permisos de lectura para reducir o risco de modificar os datos accidentalmente.