MySQL Schema MCP Server

Un servidor para recuperar información del esquema de bases de datos MySQL utilizando el framework FastMCP.

Documentación

MySQL Schema MCP Server

Un servidor de Propuesta de Cambio de Metadatos (MCP) para recuperar información del esquema de bases de datos MySQL utilizando el framework FastMCP.

Características

  • Obtener lista de bases de datos
  • Obtener lista de tablas de bases de datos
  • Obtener información del esquema de tabla (columnas)
  • Obtener información de índices de tabla
  • Obtener información de claves foráneas de tabla

Configuración

Configuración local con uv

  1. Clona este repositorio
  2. Instala uv si aún no lo tienes:
    pip install uv
    
  3. Crea un entorno virtual e instala las dependencias:
    uv venv
    uv pip install -r requirements.txt
    
  4. Crea un archivo .env basado en .env.example con los detalles de tu conexión MySQL:
    MYSQL_HOST=localhost
    MYSQL_PORT=3306
    MYSQL_USER=your_username
    MYSQL_PASSWORD=your_password
    MYSQL_DATABASE=information_schema
    

Configuración local con pip

  1. Clona este repositorio
  2. Instala las dependencias:
    pip install -r requirements.txt
    
  3. Crea un archivo .env basado en .env.example con los detalles de tu conexión MySQL:
    MYSQL_HOST=localhost
    MYSQL_PORT=3306
    MYSQL_USER=your_username
    MYSQL_PASSWORD=your_password
    MYSQL_DATABASE=information_schema
    

Configuración de Docker

Construcción y ejecución de la imagen Docker

  1. Clona este repositorio

  2. Construye la imagen Docker:

    docker build -t mysql-mcp-server .
    
  3. Ejecuta el contenedor Docker con variables de entorno para la conexión MySQL:

    docker run -p 8000:8000 \
      -e MYSQL_HOST=host.docker.internal \
      -e MYSQL_PORT=3306 \
      -e MYSQL_USER=your_username \
      -e MYSQL_PASSWORD=your_password \
      -e MYSQL_DATABASE=information_schema \
      mysql-mcp-server
    

    Nota: host.docker.internal se utiliza para conectarse a la instancia MySQL que se ejecuta en tu máquina host desde dentro del contenedor Docker.

  4. Para Mac y Windows, host.docker.internal se resuelve a la máquina host. Para Linux, es posible que necesites usar:

    docker run -p 8000:8000 \
      --add-host=host.docker.internal:host-gateway \
      -e MYSQL_HOST=host.docker.internal \
      -e MYSQL_USER=your_username \
      -e MYSQL_PASSWORD=your_password \
      mysql-mcp-server
    

Uso

Uso local

Inicia el servidor:

python main.py

Uso de Docker

Ejecuta el contenedor Docker (como se muestra en la sección de configuración):

docker run -p 8000:8000 \
  -e MYSQL_HOST=host.docker.internal \
  -e MYSQL_USER=your_username \
  -e MYSQL_PASSWORD=your_password \
  mysql-mcp-server

También puedes crear un archivo .env y montarlo en el contenedor:

docker run -p 8000:8000 \
  -v $(pwd)/.env:/app/.env \
  mysql-mcp-server

Configuración JSON de MCP

Para usar este servidor MCP con clientes compatibles con MCP, deberás configurar el cliente con la configuración JSON adecuada. Aquí hay ejemplos tanto para configuraciones locales como de Docker:

Configuración MCP local

{
  "mcpServers": {
    "mysql-schema": {
      "command": "python",
      "args": [
        "main.py"
      ],
      "cwd": "/path/to/mcp-first",
      "alwaysAllow": [
        "databases",
        "tables",
        "schema",
        "indexes",
        "foreign_keys"
      ]
    }
  }
}

Configuración MCP de Docker

{
  "mcpServers": {
    "mysql-schema": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "MYSQL_HOST=host.docker.internal",
        "-e",
        "MYSQL_USER=your_username",
        "-e",
        "MYSQL_PASSWORD=your_password",
        "mysql-mcp-server"
      ],
      "alwaysAllow": [
        "databases",
        "tables",
        "schema",
        "indexes",
        "foreign_keys"
      ]
    }
  }
}

Herramientas disponibles

El servidor proporciona las siguientes herramientas:

  • databases: Lista todas las bases de datos
  • tables: Lista todas las tablas en una base de datos
  • schema: Obtén el esquema (columnas, índices y claves foráneas) para una o más tablas.
  • indexes: Obtén los índices para una tabla específica
  • foreign_keys: Obtén las claves foráneas para una tabla específica

Ejemplo

from fastmcp.client import Client

# Connect to the MCP server
client = Client("http://localhost:8000")

# List all databases
databases = client.databases()

# List tables in a specific database
tables = client.tables(database="your_database")

# Get schema for a specific table
schema = client.schema(tables=["your_table"], database="your_database")

# Get schema for multiple tables
schemas = client.schema(tables=["table1", "table2"], database="your_database")

# Get indexes for a specific table
indexes = client.indexes(table="your_table", database="your_database")

# Get foreign keys for a specific table
foreign_keys = client.foreign_keys(table="your_table", database="your_database")