mirror of
https://github.com/wgpsec/redc.git
synced 2026-01-24 12:43:19 +08:00
6.2 KiB
6.2 KiB
MCP (模型上下文协议) 支持
中文 | English
概述
redc 现已支持模型上下文协议(MCP),允许 AI 助手和自动化工具通过编程方式与 redc 的基础设施管理功能进行交互。
MCP 支持实现了:
- AI 驱动的基础设施管理:让 AI 助手帮助您部署和管理红队基础设施
- 自动化工作流:将 redc 与 AI 工具和自动化平台集成
- 编程访问:通过标准化的 JSON-RPC 协议控制 redc
- 多模式集成:通过 STDIO 或 SSE 传输与各种 AI 客户端协同工作
功能特性
redc MCP 服务器提供以下能力:
工具(操作)
- list_templates - 列出所有可用的 redc 模板/镜像
- list_cases - 列出当前项目中的所有场景
- plan_case - 从模板规划新场景(类似 terraform plan - 预览资源而不实际创建)
- start_case - 通过 ID 启动场景(这将实际创建并启动基础设施)
- stop_case - 通过 ID 停止运行中的场景
- kill_case - 通过 ID 销毁场景
- get_case_status - 获取特定场景的状态
- exec_command - 在场景上执行命令
资源
- redc://templates - 可用模板的 JSON 列表
- redc://cases - 当前项目中所有场景的 JSON 列表
- redc://config - 当前 redc 配置
传输模式
redc MCP 服务器支持两种传输模式:
1. STDIO 传输
STDIO 模式非常适合与本地 AI 助手和工具集成。服务器从 stdin 读取 JSON-RPC 请求并将响应写入 stdout。
使用方式:
redc mcp stdio
此模式适用于:
- Claude Desktop 集成
- 本地 AI 助手工具
- 开发和测试
- 管道自动化
2. SSE(服务器发送事件)传输
SSE 模式运行一个 HTTP 服务器,可以处理多个客户端并提供可通过 Web 访问的端点。
使用方式:
# 默认地址(localhost:8080)
redc mcp sse
# 自定义地址
redc mcp sse localhost:9000
# 监听所有接口
redc mcp sse 0.0.0.0:8080
# 简写形式(仅端口)
redc mcp sse :8080
SSE 服务器提供三个端点:
GET /- 服务器信息POST /message- 发送 JSON-RPC 消息(推荐)GET /sse- SSE 流式端点
此模式适用于:
- 基于 Web 的 AI 客户端
- 远程访问
- 多用户环境
- 生产部署
使用示例
初始化 MCP 协议
连接到 MCP 服务器时,客户端必须首先发送 initialize 请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {}
}
响应:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"capabilities": {
"tools": {},
"resources": {}
},
"serverInfo": {
"name": "redc",
"version": "1.x.x"
}
}
}
列出可用工具
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}
创建场景
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "plan_case",
"arguments": {
"template": "aliyun/ecs",
"name": "my-test-case",
"env": {
"region": "cn-hangzhou"
}
}
}
}
注意: plan_case 执行 terraform plan 来验证配置而不实际创建基础设施。之后使用 start_case 来实际创建和启动资源。
启动场景
{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "start_case",
"arguments": {
"case_id": "8a57078ee856"
}
}
}
执行命令
{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "exec_command",
"arguments": {
"case_id": "8a57078ee856",
"command": "whoami"
}
}
}
读取资源
{
"jsonrpc": "2.0",
"id": 6,
"method": "resources/read",
"params": {
"uri": "redc://cases"
}
}
与 AI 助手集成
Claude Desktop
将以下内容添加到您的 Claude Desktop 配置文件(macOS 上位于 ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"redc": {
"command": "/path/to/redc",
"args": ["mcp", "stdio"],
"env": {
"REDC_PROJECT": "default"
}
}
}
}
使用 curl 配合 SSE 模式
# 启动 SSE 服务器
redc mcp sse localhost:8080
# 在另一个终端中发送请求
curl -X POST http://localhost:8080/message \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'
配置
MCP 服务器使用与 redc CLI 相同的配置:
- 项目:使用
--project标志指定项目(默认:"default") - 用户:使用
--user标志指定操作者(默认:"system") - 配置文件:使用
--config标志指定自定义配置文件 - 调试模式:使用
--debug标志启用调试日志
示例:
redc mcp sse --project myproject --user alice --debug
安全注意事项
STDIO 模式
- 在本地运行,具有与运行 redc 的用户相同的权限
- 无网络暴露
- 适合本地开发
SSE 模式
- 在网络上暴露 HTTP 端点
- 警告:默认情况下没有身份验证
- 建议:
- 仅绑定到 localhost(默认)
- 使用防火墙规则限制访问
- 部署在带有身份验证的反向代理后面
- 使用 VPN 或 SSH 隧道进行远程访问
故障排除
服务器无法启动
- 检查端口是否已被占用
- 验证 redc 配置是否有效
- 确保模板目录存在
命令执行失败
- 验证场景 ID 是否正确
- 在执行命令前检查场景状态
- 确保可以通过 SSH 连接到场景
- 检查 redc 日志以获取详细错误信息
连接问题
- STDIO 模式:检查 JSON-RPC 消息格式是否正确
- SSE 模式:验证服务器是否正在运行且可访问
- 使用
--debug标志获取详细日志
协议版本
redc 实现 MCP 协议版本 2024-11-05。
其他资源
支持
如有问题或疑问:
- GitHub Issues:https://github.com/wgpsec/redc/issues
- Discussions:https://github.com/wgpsec/redc/discussions