使用说明
MCP IntelliTrace部署服务器
一个模型上下文协议(MCP)服务器,用于通过Cloudflare自动配置DNS并通过服务器发送事件(SSE)实时跟踪进度,将项目部署到AWS Handle。
特性
- 🚀 自动VM创建:使用自定义配置创建AWS ExpressRoute实例
- 📦 GitHub集成:直接从GitHub存储库克隆和部署项目
- 🌐 DNS管理:自动创建和管理Cloudflare DNS记录
- 🔄 重新部署:只需一个命令,即可提取最新代码并重新启动服务
- 📡 实时更新:用于实时部署进度跟踪的服务器发送事件(SSE)
- 🔒 安全:敏感凭据的加密存储
- 🛠️ Docker支持:自动Docker Compose部署
- 🌍 Caddy集成:自动反向代理和SSL证书管理
建筑
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ MCP Client │ │ MCP Server │ │ AWS Lightsail │
│ (LLM/App) │◄──►│ (This Server) │◄──►│ Instance │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ Cloudflare │
│ DNS Records │
└─────────────────┘
安装
-
克隆存储库:
git clone <repository-url> cd mcp-lightsail-server -
安装依赖项:
npm install -
配置环境变量:
cp .env.example .env # Edit .env with your configuration -
构建项目:
npm run build -
启动服务器:
npm start
环境变量
创建一个 .env 包含以下变量的文件:
# Server Configuration
PORT=3000
ENCRYPTION_KEY=your-32-character-encryption-key-here
# Optional: Default AWS Configuration (for 'og' account type)
OPENGIG_AWS_ACCESS_KEY_ID=your-aws-access-key
OPENGIG_AWS_SECRET_ACCESS_KEY=your-aws-secret-key
OPENGIG_AWS_REGION=us-east-1
OPENGIG_AVAILABILITY_ZONE=us-east-1a
OPENGIG_AWS_SSH_KEY=your-ssh-private-key
OPENGIG_CLOUDFLARE_ZONE_ID=your-cloudflare-zone-id
OPENGIG_CLOUDFLARE_API_TOKEN=your-cloudflare-api-token
MCP工具
1. create_vm
创建新的kubectl虚拟机并部署GitHub项目。
参数:
awsAccessKey(string):AWS访问密钥IDawsSecretKey(string):AWS秘密访问密钥awsRegion(string):AWS区域(例如us-east-1)availabilityZone(string):AWS可用区(例如us-east-1a)awsSshKey(string):AWS SSH私钥(PEM格式)bundleId(string):ExpressRoute捆绑包ID(例如,nano_2_0)blueprintId(字符串):ExpressRoute蓝图ID(例如ubuntu20_04)githubRepoUrl(string):GitHub存储库URLgithubPat(string):GitHub个人访问令牌cloudflareZoneId(字符串):Cloudflare区域IDcloudflareApiToken(字符串):Cloudflare API代币projectName(string):部署的项目名称domain(字符串,可选):域名(默认为opengig.work)accountType(string):'og'或'custom'
退货:
{
"sessionId": "uuid-session-id",
"message": "VM deployment started. Use the session ID to track progress via SSE."
}
2. redeploy_project
通过提取最新代码重新部署现有项目。
参数:
sessionId(string):来自原始部署的会话ID
3. get_vm_status
获取已部署VM的当前状态。
参数:
sessionId(string):部署中的会话ID
4. get_all_deployments
列出所有活动部署。
5. delete_vm
删除虚拟机并清理所有相关资源。
参数:
sessionId(string):部署中的会话ID
6. force_delete_vm
强制删除VM会话(在正常删除失败时使用)。
参数:
sessionId(string):部署中的会话ID
实时进度跟踪
连接到SSE端点以接收实时更新:
const eventSource = new EventSource(`http://localhost:3000/sse/${sessionId}`);
eventSource.onmessage = function(event) {
const data = JSON.parse(event.data);
console.log('Event:', data);
switch(data.type) {
case 'progress':
console.log('Progress:', data.data.message);
break;
case 'log':
console.log('Log:', data.data);
break;
case 'error':
console.error('Error:', data.data.error);
break;
case 'complete':
console.log('Complete:', data.data);
break;
}
};
事件类型
progress:部署进度更新log:命令执行日志error:错误消息complete:部署完成status:当前部署状态
API终点
POST /mcp-MCP协议端点GET /mcp-MCP SSE通知DELETE /mcp-MCP会话终止GET /sse/:sessionId-实时部署进度GET /health-健康检查端点
用法示例
// Using the MCP client
const result = await mcpClient.callTool('create_vm', {
awsAccessKey: 'AKIA...',
awsSecretKey: 'secret...',
awsRegion: 'us-east-1',
availabilityZone: 'us-east-1a',
awsSshKey: '-----BEGIN RSA PRIVATE KEY-----\n...',
bundleId: 'nano_2_0',
blueprintId: 'ubuntu_20_04',
githubRepoUrl: 'https://github.com/user/repo',
githubPat: 'ghp_...',
cloudflareZoneId: 'zone-id',
cloudflareApiToken: 'token',
projectName: 'my-app',
accountType: 'custom'
});
// Track progress
const sessionId = result.sessionId;
const eventSource = new EventSource(`http://localhost:3000/sse/${sessionId}`);
部署程序
- VM创建:创建具有指定配置的ExpressRoute实例
- 网络设置:打开实例的所有端口
- SSH连接:通过SSH连接到实例
- 环境设置:安装Docker、Caddy和其他依赖项
- 存储库克隆:克隆GitHub存储库
- 球童配置:设置反向代理和SSL
- 应用程序部署:跑步
docker compose up -d - DNS配置:创建Cloudflare DNS A记录
- 完成:报告访问URL成功
安全考虑
- 所有敏感数据(AWS密钥、SSH密钥、GitHub令牌)都是静态加密的
- 将环境变量用于默认配置
- 对MCP服务器实施适当的访问控制
- 定期轮换API令牌和访问密钥
故障排除
常见问题
- SSH连接超时:确保SSH密钥正确,并且实例已完全初始化
- DNS创建失败:验证Cloudflare API令牌是否具有DNS编辑权限
- Docker编写错误:检查存储库是否包含有效的
docker-compose.yml - 港口准入问题:确保ExpressRoute防火墙规则允许必要的端口
日志
通过检查部署日志 get_vm_status 工具或SSE事件以获取详细的错误信息。
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
许可证
MIT许可证-有关详细信息,请参阅许可证文件。 const结果=等待mcpClient.callTool('create_vm',params); 返回结果; } }, 重新部署_项目:{ description:'重新部署现有项目', 参数:{ 类型:“对象”, 属性:{ 会话ID:{类型:“string”} }, 必填项:['sessionId] }, 执行:异步(参数)=>{ const result=await mcpClient.callTool('deploy_project',params); 返回结果; } }, get_vm-status:{ description:'获取VM部署状态', 参数:{ 类型:“对象”, 属性:{ 会话ID:{类型:“string”} }, 必填项:['sessionId] }, 执行:异步(参数)=>{ const结果=等待mcpClient.callTool('get_vm_status',参数); 返回结果; } } } });
### 4. Real-time Progress Tracking
```typescript
// After deployment starts, track progress
const sessionId = deploymentResult.sessionId;
// Set up SSE connection for real-time updates
const eventSource = new EventSource(`http://localhost:3000/sse/${sessionId}`);
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
// Update your UI with deployment progress
switch(data.type) {
case 'progress':
console.log('Progress:', data.data.message);
break;
case 'complete':
console.log('Deployment complete:', data.data.url);
eventSource.close();
break;
case 'error':
console.error('Deployment error:', data.data.error);
eventSource.close();
break;
}
};
用法示例
// Direct MCP client usage
const result = await mcpClient.callTool('create_vm', {
awsAccessKey: 'AKIA...',
awsSecretKey: 'secret...',
awsRegion: 'us-east-1',
availabilityZone: 'us-east-1a',
awsSshKey: '-----BEGIN RSA PRIVATE KEY-----\n...',
bundleId: 'nano_2_0',
blueprintId: 'ubuntu_20_04',
githubRepoUrl: 'https://github.com/user/repo',
githubPat: 'ghp_...',
cloudflareZoneId: 'zone-id',
cloudflareApiToken: 'token',
projectName: 'my-app',
accountType: 'custom'
});
// Track progress
const sessionId = result.sessionId;
const eventSource = new EventSource(`http://localhost:3000/sse/${sessionId}`);
部署程序
- VM创建:创建具有指定配置的ExpressRoute实例
- 网络设置:打开实例的所有端口
- SSH连接:通过SSH连接到实例
- 环境设置:安装Docker、Caddy和其他依赖项
- 存储库克隆:克隆GitHub存储库
- 球童配置:设置反向代理和SSL
- 应用程序部署:跑步
docker compose up -d - DNS配置:创建Cloudflare DNS A记录
- 完成:报告访问URL成功
安全考虑
- 所有敏感数据(AWS密钥、SSH密钥、GitHub令牌)都是静态加密的
- 将环境变量用于默认配置
- 对MCP服务器实施适当的访问控制
- 定期轮换API令牌和访问密钥
故障排除
常见问题
- SSH连接超时:确保SSH密钥正确,并且实例已完全初始化
- DNS创建失败:验证Cloudflare API令牌是否具有DNS编辑权限
- Docker编写错误:检查存储库是否包含有效的
docker-compose.yml - 港口准入问题:确保ExpressRoute防火墙规则允许必要的端口
日志
通过检查部署日志 get_vm_status 工具或SSE事件以获取详细的错误信息。
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
许可证
MIT许可证-有关详细信息,请参阅许可证文件。
