返回市场
django迁移-mcp

django迁移-mcp

作者:mrrobotke6 星标更新:2025-07-17

项目介绍

MseeP.ai 安全评估徽章

Django 迁移 MCP 服务

这是一个用于在分布式环境中管理 Django 迁移的模型上下文协议(MCP)服务。该服务封装了 Django 的迁移命令,并将其暴露为 MCP 端点,使得跨多个服务管理迁移变得容易,并且可以与 CI/CD 管道集成。

功能

  • 检查迁移状态(相当于 showmigrations
  • 创建新的带有验证的迁移(相当于 makemigrations
  • 带有安全检查的应用迁移(相当于 migrate
  • 额外的验证和安全检查:
    • 迁移顺序验证
    • 冲突检测
    • 依赖关系验证
    • 迁移操作的安全性分析

安装

本地开发

  1. 克隆仓库:
git clone https://github.com/mrrobotke/django-migrations-mcp.git
cd django-migrations-mcp
  1. 安装依赖项:
pip install -r requirements.txt

配置

设置以下环境变量:

export DJANGO_SETTINGS_MODULE="your_project.settings"
export MCP_SERVICE_PORT=8000  # 可选,默认为 8000

使用

运行服务

  1. 直接使用 Python:
python -m migrations_mcp.service
  1. 使用 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

MCP 端点

  1. 显示迁移:
from mcp import MCPClient

client = MCPClient()
migrations = await client.call("show_migrations")
  1. 创建迁移:
result = await client.call("make_migrations", {
    "app_labels": ["myapp"],  # 可选
    "dry_run": True  # 可选
})
  1. 应用迁移:
result = await client.call("migrate", {
    "app_label": "myapp",  # 可选
    "migration_name": "0001",  # 可选
    "fake": False,  # 可选
    "plan": True  # 可选
})

CI/CD 集成

示例 GitHub Actions 工作流:

name: Django 迁移检查

on:
  pull_request:
    paths:
      - '*/migrations/*.py'
      - '*/models.py'

jobs:
  check-migrations:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    
    - name: 设置 Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.11'
    
    - name: 安装依赖项
      run: |
        pip install -r requirements.txt
    
    - name: 启动 MCP 服务
      run: |
        python -m migrations_mcp.service &
    
    - name: 检查迁移
      run: |
        python ci/check_migrations.py

示例 check_migrations.py 脚本:

import asyncio
from mcp import MCPClient

async def check_migrations():
    client = MCPClient()
    
    # 检查当前状态
    migrations = await client.call("show_migrations")
    
    # 尝试创建迁移
    result = await client.call("make_migrations", {"dry_run": True})
    if not result.success:
        print(f"错误: {result.message}")
        exit(1)
    
    print("迁移检查通过!")

if __name__ == "__main__":
    asyncio.run(check_migrations())

开发

运行测试

pytest migrations_mcp/tests/

代码风格

项目遵循 PEP 8 指南。使用以下命令格式化代码:

black migrations_mcp/
isort migrations_mcp/

许可证

MIT 许可证。详情见 LICENSE 文件。

贡献

  1. 分叉仓库
  2. 创建功能分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m '添加神奇的功能')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 打开拉取请求

Docker 使用

项目包含一个 docker-commands.json 文件,提供了不同部署场景的结构化命令。您可以直接使用这些命令或在脚本中解析它们。

可用的 Docker 配置

  1. Redis MCP 服务器
# 运行 Redis MCP 服务器
docker run -i --rm mcp/redis redis://host.docker.internal:6379
  1. Django 迁移 MCP 服务器
# 基本设置
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

# 结合 Redis 集成
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. 开发环境
# 使用 docker-compose
docker-compose up -d --build
  1. 测试环境
# 在容器中运行测试
docker run --rm \
  -e DJANGO_SETTINGS_MODULE=your_project.settings \
  -e PYTHONPATH=/app \
  -v ${PWD}:/app \
  django-migrations-mcp \
  pytest
  1. 生产环境
# 生产设置,带健康检查
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

程序化使用命令

您可以解析并程序化地使用这些命令:

import json
import subprocess

# 加载命令
with open('docker-commands.json') as f:
    commands = json.load(f)

# 运行 Redis MCP 服务器
redis_config = commands['mcpServers']['redis']
subprocess.run([redis_config['command']] + redis_config['args'])

# 运行 Django 迁移 MCP 服务器
django_config = commands['mcpServers']['djangoMigrations']
subprocess.run([django_config['command']] + django_config['args'])

网络设置

  1. 开发网络
docker network create mcp-dev-network
  1. 生产网络
docker network create --driver overlay --attachable mcp-prod-network

使用 MCP 工具

服务暴露了几个可以通过 curl 或任何 HTTP 客户端访问的端点:

  1. 显示迁移
curl -X POST http://localhost:8000/mcp \
  -H "Content-Type: application/json" \
  -d '{"method": "show_migrations"}'
  1. 创建迁移
curl -X POST http://localhost:8000/mcp \
  -H "Content-Type: application/json" \
  -d '{"method": "make_migrations", "params": {"apps": ["your_app"]}}'
  1. 应用迁移
curl -X POST http://localhost:8000/mcp \
  -H "Content-Type: application/json" \
  -d '{"method": "migrate", "params": {"app": "your_app"}}'