Django Migrations MCP Service

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Integrations

  • Manages Django database migrations in distributed environments by wrapping Django's migration commands as MCP endpoints, providing functionality to check migration status, create new migrations, and apply migrations with additional validation and safety checks.

  • Provides containerized deployment options with various configurations for running the MCP service, including development, testing, and production environments with appropriate network setups.

  • Enables CI/CD pipeline integration for automating migration checks on pull requests, particularly when model or migration files are modified.

Servicio MCP de migraciones de Django

Un servicio de Protocolo de Contexto de Modelo (MCP) para gestionar migraciones de Django en entornos distribuidos. Este servicio encapsula los comandos de migración de Django y los expone como puntos finales de MCP, lo que facilita la gestión de migraciones entre múltiples servicios y la integración con pipelines de CI/CD.

Características

  • Comprobar el estado de la migración (equivalente a showmigrations )
  • Crear nuevas migraciones con validación (equivalente a makemigrations )
  • Aplicar migraciones con comprobaciones de seguridad (equivalente a migrate )
  • Comprobaciones adicionales de validación y seguridad:
    • Verificación del orden de migración secuencial
    • Detección de conflictos
    • Validación de dependencia
    • Análisis de seguridad de las operaciones migratorias

Instalación

Desarrollo local

  1. Clonar el repositorio:
git clone https://github.com/mrrobotke/django-migrations-mcp.git cd django-migrations-mcp
  1. Instalar dependencias:
pip install -r requirements.txt

Configuración

Establezca las siguientes variables de entorno:

export DJANGO_SETTINGS_MODULE="your_project.settings" export MCP_SERVICE_PORT=8000 # Optional, defaults to 8000

Uso

Ejecución del servicio

  1. Directamente con Python:
python -m migrations_mcp.service
  1. Usando Docker:
docker build -t django-migrations-mcp . docker run -e DJANGO_SETTINGS_MODULE=your_project.settings \ -v /path/to/your/django/project:/app/project \ -p 8000:8000 \ django-migrations-mcp

Puntos finales de MCP

  1. Mostrar migraciones:
from mcp import MCPClient client = MCPClient() migrations = await client.call("show_migrations")
  1. Realizar migraciones:
result = await client.call("make_migrations", { "app_labels": ["myapp"], # Optional "dry_run": True # Optional })
  1. Aplicar Migraciones:
result = await client.call("migrate", { "app_label": "myapp", # Optional "migration_name": "0001", # Optional "fake": False, # Optional "plan": True # Optional })

Integración CI/CD

Ejemplo de flujo de trabajo de Acciones de GitHub:

name: Django Migrations Check on: pull_request: paths: - '*/migrations/*.py' - '*/models.py' jobs: check-migrations: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.11' - name: Install dependencies run: | pip install -r requirements.txt - name: Start MCP service run: | python -m migrations_mcp.service & - name: Check migrations run: | python ci/check_migrations.py

Ejemplo de script check_migrations.py:

import asyncio from mcp import MCPClient async def check_migrations(): client = MCPClient() # Check current status migrations = await client.call("show_migrations") # Try making migrations result = await client.call("make_migrations", {"dry_run": True}) if not result.success: print(f"Error: {result.message}") exit(1) print("Migration check passed!") if __name__ == "__main__": asyncio.run(check_migrations())

Desarrollo

Ejecución de pruebas

pytest migrations_mcp/tests/

Estilo de código

El proyecto sigue las directrices PEP 8. Formatee su código con:

black migrations_mcp/ isort migrations_mcp/

Licencia

Licencia MIT. Consulte el archivo de LICENCIA para obtener más detalles.

Contribuyendo

  1. Bifurcar el repositorio
  2. Crea tu rama de funciones ( git checkout -b feature/amazing-feature )
  3. Confirme sus cambios ( git commit -m 'Add amazing feature' )
  4. Empujar a la rama ( git push origin feature/amazing-feature )
  5. Abrir una solicitud de extracción

Uso de Docker

El proyecto incluye un archivo docker-commands.json que proporciona comandos estructurados para diferentes escenarios de implementación. Puedes usarlos directamente o analizarlos en tus scripts.

Configuraciones de Docker disponibles

  1. Servidor MCP de Redis
# Run Redis MCP server docker run -i --rm mcp/redis redis://host.docker.internal:6379
  1. Servidor MCP de migraciones de Django
# Basic setup docker run -d \ --name django-migrations-mcp \ -e DJANGO_SETTINGS_MODULE=your_project.settings \ -e MCP_SERVICE_PORT=8000 \ -v /path/to/your/django/project:/app/project \ -p 8000:8000 \ django-migrations-mcp # With Redis integration docker run -d \ --name django-migrations-mcp \ -e DJANGO_SETTINGS_MODULE=your_project.settings \ -e MCP_SERVICE_PORT=8000 \ -e REDIS_URL=redis://host.docker.internal:6379 \ -v /path/to/your/django/project:/app/project \ -p 8000:8000 \ --network host \ django-migrations-mcp
  1. Entorno de desarrollo
# Using docker-compose docker-compose up -d --build
  1. Entorno de prueba
# Run tests in container docker run --rm \ -e DJANGO_SETTINGS_MODULE=your_project.settings \ -e PYTHONPATH=/app \ -v ${PWD}:/app \ django-migrations-mcp \ pytest
  1. Entorno de producción
# Production setup with health check docker run -d \ --name django-migrations-mcp \ -e DJANGO_SETTINGS_MODULE=your_project.settings \ -e MCP_SERVICE_PORT=8000 \ -e REDIS_URL=redis://your-redis-host:6379 \ -v /path/to/your/django/project:/app/project \ -p 8000:8000 \ --restart unless-stopped \ --network your-network \ django-migrations-mcp

Uso de los comandos mediante programación

Puede analizar y utilizar los comandos mediante programación:

import json import subprocess # Load commands with open('docker-commands.json') as f: commands = json.load(f) # Run Redis MCP server redis_config = commands['mcpServers']['redis'] subprocess.run([redis_config['command']] + redis_config['args']) # Run Django Migrations MCP server django_config = commands['mcpServers']['djangoMigrations'] subprocess.run([django_config['command']] + django_config['args'])

Configuración de red

  1. Red de Desarrollo
docker network create mcp-dev-network
  1. Red de producción
docker network create --driver overlay --attachable mcp-prod-network

Uso de herramientas MCP

El servicio expone varios puntos finales a los que se puede acceder a través de curl o cualquier cliente HTTP:

  1. Mostrar migraciones
curl -X POST http://localhost:8000/mcp \ -H "Content-Type: application/json" \ -d '{"method": "show_migrations"}'
  1. Realizar migraciones
curl -X POST http://localhost:8000/mcp \ -H "Content-Type: application/json" \ -d '{"method": "make_migrations", "params": {"apps": ["your_app"]}}'
  1. Aplicar migraciones
curl -X POST http://localhost:8000/mcp \ -H "Content-Type: application/json" \ -d '{"method": "migrate", "params": {"app": "your_app"}}'
-
security - not tested
F
license - not found
-
quality - not tested

Un servicio de Protocolo de Contexto de Modelo que envuelve los comandos de migración de Django como puntos finales de MCP, lo que facilita la administración de migraciones entre múltiples servicios y la integración con canales de CI/CD.

  1. Features
    1. Installation
      1. Local Development
    2. Configuration
      1. Usage
        1. Running the Service
        2. MCP Endpoints
      2. CI/CD Integration
        1. Development
          1. Running Tests
          2. Code Style
        2. License
          1. Contributing
            1. Docker Usage
              1. Available Docker Configurations
              2. Using the Commands Programmatically
              3. Network Setup
              4. Using MCP Tools
            ID: jcsw5n4pn7