🚀 MCP Ansible Drupal
使用Ansible自动化Drupal部署工作流的模型上下文协议(MCP)服务器
](https://www.npmjs.com/package/@webfer/mcp-ansible-drupal) 
MCP Ansible Drupal 是一个智能自动化服务器,将AI助手与Ansible驱动的Drupal部署连接起来。它提供了一套全面的工具,通过自然语言交互来管理从初始设置到生产发布的整个部署生命周期。
🔗 与无缝协作 醉酒 -Drupal的基于Ansible的部署框架。这个MCP服务器提供了一个智能界面,通过人工智能助手控制DrupAnsible剧本,使DevOps工作流程变得对话式和可访问。
______________________________________________________________________
📋 目录
______________________________________________________________________
✨ 特性
🔄 部署管理
- 安装/更新部署:对临时/生产执行初始安装或增量更新
- 零停机释放:利用Ansistrano实现具有回滚功能的无缝部署
- 资产同步:主题、图像和静态文件的可选资产部署
- 数据库操作:自动导入、备份和更新数据库
🔐 保险库安全
- 加密配置:用于安全凭证管理的Ansible Vault集成
- 加密/解密工具:直接从您的AI助手进行安全的vault文件管理
- 环境隔离:用于暂存和生产环境的单独vault文件
📊 监控和日志
- 实时部署流媒体:部署执行期间的实时进度更新
- 日志管理:自动日志轮换(保留最后3次部署)
- 部署历史记录:查询最近的部署日志以进行故障排除
🎛️ 工作流程自动化
- 存储库克隆:自动DrupAnsible存储库设置
- 配置转移:将Ansible文件智能移动到项目根目录
- 清理作业:自动删除临时文件和目录
🤖 AI原生设计
- 自然语言控制:通过对话执行复杂的部署工作流
- 交互式确认:破坏性操作的安全提示
- 上下文感知响应:每一步都有详细的反馈
______________________________________________________________________
🎯 什么是MCP?
这 模型上下文协议(MCP) 是一个开放标准,使AI助手(如Claude、ChatGPT)能够安全地与外部工具和数据源进行交互。将其视为一个通用适配器,让AI模型:
- 🔧 执行系统操作
- 📁 访问文件系统
- 🌐 与API交互
- 🚀 触发部署管道
该项目实现了一个专门为Drupal/Ansible工作流设计的MCP服务器,使DevOps任务具有对话性和可访问性。
______________________________________________________________________
🏗️ 建筑
┌─────────────────────────────────────────────────────────────┐
│ AI Assistant (Claude) │
│ Natural Language Interface │
└────────────────────────┬────────────────────────────────────┘
│ MCP Protocol
┌────────────────────────▼────────────────────────────────────┐
│ MCP-Ansible-Drupal Server │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Tools Layer │ │
│ │ • cloneRepository • validateDeploy │ │
│ │ • ansibleSetup • executeDeployment │ │
│ │ • decryptVaultFile • encryptVaultFile │ │
│ │ • getDeploymentLogs • ansibleCleanup │ │
│ └──────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Helpers Layer │ │
│ │ • confirmFirstDeployment • runAnsible │ │
│ │ • generateSkipTags • resolveProjectPaths │ │
│ └──────────────────────────────────────────────────────┘ │
└────────────────────────┬────────────────────────────────────┘
│ Shell Commands
┌────────────────────────▼────────────────────────────────────┐
│ Ansible Playbooks │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ • stage-deploy.yml • live-deploy.yml │ │
│ │ • rollback.yml • Ansistrano tasks │ │
│ └──────────────────────────────────────────────────────┘ │
└────────────────────────┬────────────────────────────────────┘
│ SSH/rsync
┌────────────────────────▼────────────────────────────────────┐
│ Drupal Application Server │
│ (Staging / Production Environment) │
└─────────────────────────────────────────────────────────────┘关键组件
1.服务器层 (src/server.ts)
- MCP协议处理程序
- 工具注册和布线
- 请求/响应管理
- 交互式确认流程
2.工具层 (src/tools/)
- 部署工具:
executeDeployment.ts,validateDeployTool.ts - Vault工具:
decryptVaultTool.ts,encryptVaultTool.ts - 设置工具:
cloneRepositoryTool.ts,ansibleSetupTool.ts - 实用工具:
getDeploymentLogs.ts,generateSkipTags.ts
3.辅助层 (src/helpers/)
- 部署确认工作流
- 可执行的命令
- 路径解析和验证
4.可靠的集成
- 战术:位于
ansible/core/目录 - 库存:中的环境特定配置
ansible/core/inventories/ - Vault文件:每个环境的加密凭据
______________________________________________________________________
📦 安装
先决条件
- Node.js 18+
- TypeScript 5.2+
- 安塞波 2.x
- Git
快速开始
⭐ 推荐:通过NPM从以下位置安装 以获得最佳体验和自动更新。
# 1. Install the package (RECOMMENDED)
npm install @webfer/mcp-ansible-drupal
# 2. Alternative: Build from source (for development only)
git clone https://github.com/webfer/MCP-Ansible-Drupal.git
cd MCP-Ansible-Drupal
npm install
npm run build
# 3. Configure your MCP client
# Add to your MCP settings (e.g., Claude Desktop config):Claude桌面配置 (claude_desktop_config.json):
{
"mcpServers": {
"mcp-ansible-drupal": {
"command": "node",
"args": ["/path/to/MCP-Ansible-Drupal/dist/server.js"],
"cwd": "/path/to/your/drupal-project"
}
}
}______________________________________________________________________
🔧 配置
项目结构要求
你的Drupal项目应该有这样的结构:
your-drupal-project/
├── ansible/
│ ├── core/
│ │ ├── stage-deploy.yml
│ │ ├── live-deploy.yml
│ │ └── inventories/
│ │ ├── stage/
│ │ │ ├── inventory.yml
│ │ │ └── group_vars/
│ │ │ ├── server.yml (encrypted)
│ │ │ └── deploy_vars.yml
│ │ └── live/
│ └── tmp/
│ └── logs/
├── vault_pass.txt (git-ignored!)
├── composer.json
└── web/ (Drupal root)Vault密码文件
创建 vault_pass.txt 在项目根目录中:
echo "your-secure-password" > vault_pass.txt
chmod 600 vault_pass.txt⚠️ 重要:添加到 .gitignore!
Ansible Vault文件
加密敏感数据:
ansible-vault encrypt ansible/core/inventories/stage/group_vars/server.yml \
--vault-password-file vault_pass.txt______________________________________________________________________
🎮 可用工具
1️⃣ 存储库设置
cloneRepository
克隆DrupAnsible基础存储库以引导您的项目。
参数:
repoUrl(字符串):存储库URL(默认值:https://github.com/webfer/drupansible.git)
提示示例(正常工作):
Clone the DrupAnsible repository to get started with the setup.______________________________________________________________________
ansibleSetup
将Ansible配置文件从临时目录移动到项目根目录。
参数: 无
提示示例(正常工作):
Run ansible setup to configure the project files.______________________________________________________________________
ansibleCleanup
安装后删除临时文件和目录。
参数: 无
提示示例(正常工作):
Clean up the temporary deployment files.______________________________________________________________________
2️⃣ 部署操作
validateDeploy
执行前验证部署配置。
参数:
environment(字符串):stage|liveaction(字符串):install|updatewithAssets(布尔值):包括资产同步
提示示例(正常工作):
Validate the deployment configuration for staging environment with install action.______________________________________________________________________
executeDeployment
执行Ansible部署手册。
参数:
environment(字符串):stage|live|productionaction(字符串):install|updatewithAssets(boolean):部署资产(默认值:false)confirmAnswer(字符串):yes|no(用于安装确认)
提示示例(正确工作):
Run initial deployment to staging environment.Execute update deployment to production with assets included.安装流量:
User: "Deploy fresh install to stage"
MCP: "⚠️ This will overwrite existing code. Continue? (yes/no)"
User: "yes"
MCP: "✅ Proceeding with deployment..."
[Live deployment logs stream here]______________________________________________________________________
3️⃣ 保管库管理
decryptVaultFile
解密Ansible Vault文件以供查看/编辑。
参数:
environment(字符串):stage|live
提示示例(正常工作):
Decrypt the stage server vault file so I can review the configuration.______________________________________________________________________
encryptVaultFile
修改后重新加密Ansible Vault文件。
参数:
environment(字符串):stage|live
提示示例(正常工作):
Encrypt the stage vault file after my changes.______________________________________________________________________
4️⃣ 监控
getDeploymentLogs
检索最近的部署日志。
参数:
lines(number):要返回的行数(默认值:50)
提示示例(正常工作):
Show me the last 100 lines of the deployment logs.______________________________________________________________________
📚 使用示例
完整工作流示例
User: "Set up a new Drupal deployment environment"
1. MCP clones DrupAnsible repository
2. MCP moves configuration files to project root
3. MCP cleans up temporary directories
User: "Configure staging credentials"
4. MCP decrypts stage vault file
5. [User edits file with credentials]
6. MCP encrypts vault file
User: "Deploy to staging"
7. MCP validates configuration
8. MCP asks for confirmation
9. User confirms "yes"
10. MCP executes deployment with live streaming
11. Deployment completes successfully
User: "Show deployment logs"
12. MCP displays recent deployment logs更新部署
User: "Update staging with latest code changes"
MCP: "✅ Executing update deployment..."
[Streaming logs]:
🔸 TASK [Rsync code to server]
🟡 changed: [stage]
🔸 TASK [Import configuration]
🟡 changed: [stage]
🔸 TASK [Run database updates]
🟡 changed: [stage]
🔸 TASK [Clear cache]
🟡 changed: [stage]
✅ Deployment completed: 45 tasks, 18 changes______________________________________________________________________
🔐 安全
最佳实践
- 从不提交保管库密码
echo "vault_pass.txt" >> .gitignore- 使用强保管库密码
openssl rand -base64 32 > vault_pass.txt- 定期轮换保管库密码
ansible-vault rekey group_vars/server.yml- 限制MCP服务器权限
- 以最低用户权限运行 - 限制文件系统访问 - 部署时使用SSH密钥身份验证
- 审核部署日志
- 日志存储在 ansible/tmp/logs/ - 安全事件审查 - 自动旋转(保持最后3个)
______________________________________________________________________
🛠️ 发展
项目结构
MCP-Ansible-Drupal/
├── src/
│ ├── server.ts # MCP server entry point
│ ├── tools/ # MCP tool implementations
│ │ ├── executeDeployment.ts
│ │ ├── validateDeployTool.ts
│ │ ├── decryptVaultTool.ts
│ │ ├── encryptVaultTool.ts
│ │ └── ...
│ ├── helpers/ # Utility functions
│ │ ├── confirmFirstDeployment.ts
│ │ ├── runAnsible.ts
│ │ └── ...
│ ├── prompts/ # User interaction prompts
│ └── types/ # TypeScript type definitions
├── ansible/ # Ansible playbooks & config
│ └── core/
│ ├── stage-deploy.yml
│ ├── live-deploy.yml
│ ├── inventories/
│ └── tasks/
├── dist/ # Compiled JavaScript
├── package.json
├── tsconfig.json
└── README.md建筑
# Compile TypeScript
npm run build
# Watch mode for development
npm run watch
# Run the server
npm start添加新工具
- 在中创建工具文件
src/tools/:
export class MyCustomTool {
name = 'myCustomTool';
description = 'Does something useful';
async run(args: any) {
// Tool implementation
return { content: [{ type: 'text', text: 'Result' }] };
}
}- 注册
src/server.ts:
import { MyCustomTool } from './tools/myCustomTool.js';
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
{
name: 'myCustomTool',
description: 'Does something useful',
inputSchema: {
/* JSON Schema */
},
},
],
}));测试
# Run tests (when available)
npm test
# Manual testing with Claude Desktop
# Check logs in:
# - macOS: ~/Library/Logs/Claude/mcp*.log
# - Windows: %APPDATA%\Claude\logs\mcp*.log______________________________________________________________________
🤝 贡献
欢迎投稿!拜托:
- 复刻仓库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 提交更改(
git commit -m 'Add amazing feature') - 推送到分支(
git push origin feature/amazing-feature) - 打开拉取请求
代码规范
- 遵循现有的TypeScript约定
- 为公共API添加JSDoc注释
- 包括错误处理
- 更新README以获取新功能
______________________________________________________________________
📄 许可证
MIT许可证-请参阅 许可证 详细信息文件
由...开发 费尔南多·卡斯特罗(韦弗饰)
______________________________________________________________________
🔗 链接
______________________________________________________________________
💬 支持
- 🐛 问题:
- 💡 讨论:
- 📧 联系: 领英
______________________________________________________________________
⭐ 如果你觉得这个项目有用,就把它当明星吧!
由...制作❤️ Drupal和DevOps社区
