这是一个用于在分布式环境中管理 Django 迁移的模型上下文协议(MCP)服务。该服务封装了 Django 的迁移命令,并将其暴露为 MCP 端点,使得跨多个服务管理迁移变得容易,并且可以与 CI/CD 管道集成。
showmigrations)makemigrations)migrate)git clone https://github.com/mrrobotke/django-migrations-mcp.git
cd django-migrations-mcp
pip install -r requirements.txt
设置以下环境变量:
export DJANGO_SETTINGS_MODULE="your_project.settings"
export MCP_SERVICE_PORT=8000 # 可选,默认为 8000
python -m migrations_mcp.service
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
from mcp import MCPClient
client = MCPClient()
migrations = await client.call("show_migrations")
result = await client.call("make_migrations", {
"app_labels": ["myapp"], # 可选
"dry_run": True # 可选
})
result = await client.call("migrate", {
"app_label": "myapp", # 可选
"migration_name": "0001", # 可选
"fake": False, # 可选
"plan": True # 可选
})
示例 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 文件。
git checkout -b feature/amazing-feature)git commit -m '添加神奇的功能')git push origin feature/amazing-feature)项目包含一个 docker-commands.json 文件,提供了不同部署场景的结构化命令。您可以直接使用这些命令或在脚本中解析它们。
# 运行 Redis MCP 服务器
docker run -i --rm mcp/redis redis://host.docker.internal:6379
# 基本设置
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
# 使用 docker-compose
docker-compose up -d --build
# 在容器中运行测试
docker run --rm \
-e DJANGO_SETTINGS_MODULE=your_project.settings \
-e PYTHONPATH=/app \
-v ${PWD}:/app \
django-migrations-mcp \
pytest
# 生产设置,带健康检查
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'])
docker network create mcp-dev-network
docker network create --driver overlay --attachable mcp-prod-network
服务暴露了几个可以通过 curl 或任何 HTTP 客户端访问的端点:
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{"method": "show_migrations"}'
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{"method": "make_migrations", "params": {"apps": ["your_app"]}}'
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{"method": "migrate", "params": {"app": "your_app"}}'