# 奥点云活动导播台工程 MCP 服务

[![npm version](https://img.shields.io/npm/v/aodianyun-lcps-mcp.svg)](https://www.npmjs.com/package/aodianyun-lcps-mcp)
[![npm downloads](https://img.shields.io/npm/dm/aodianyun-lcps-mcp.svg)](https://www.npmjs.com/package/aodianyun-lcps-mcp)

这是一个用于管理奥点云活动导播台工程的 MCP (Model Context Protocol) 服务，提供了完整的 CRUD 操作功能。支持通过 npx 直接运行，无需安装。

## ✨ 功能特性

- 🎬 **创建活动导播台工程** - 创建新的导播台工程
- 🚀 **开启活动导播台工程** - 启动指定的导播台工程
- 🛑 **关闭活动导播台工程** - 停止指定的导播台工程
- 🗑️ **删除活动导播台工程** - 删除指定的导播台工程
- 📋 **获取活动导播台工程列表** - 获取所有工程列表
- 🎛️ **获取活动导播台中控页面** - 获取中控页面访问链接
- 🔐 **获取LCPS认证Token** - 获取LCPS认证Token
- 📡 **设置信道参数** - 批量设置信道参数（视频比例、输入源、缓冲时间）
- 📡 **设置输出地址** - 配置导播台输出流参数
- 🔧 **命令行参数支持** - 支持通过参数传入认证信息
- 🌍 **环境变量支持** - 支持通过环境变量配置
- 🔐 **自动认证** - 支持自动获取和解析认证信息

## 🚀 快速开始

### 方法1：使用 npx 直接运行（推荐）

```bash


# 使用参数
npx aodianyun-lcps-mcp --access-id "xxx" --access-key "xx" --domain "jstest.aodianyun.cn"

# 指定版本运行
npx aodianyun-lcps-mcp@1.0.20 --access-id "xx" --access-key "xx" --domain "jstest.aodianyun.cn"


```

### 方法2：全局安装后使用

```bash
# 全局安装
npm install -g aodianyun-lcps-mcp

# 运行服务
aodianyun-lcps-mcp --access-id "xxxx" --access-key "xxxxxx"

# 安装指定版本
npm install -g aodianyun-lcps-mcp@1.0.20
```

### 方法3：本地安装

```bash
# 安装依赖
npm install aodianyun-lcps-mcp

# 运行服务
npx aodianyun-lcps-mcp --access-id "xxxx" --access-key "xxxx"

# 安装指定版本
npm install aodianyun-lcps-mcp@1.0.20
```

## 📋 命令行参数

| 参数 | 短参数 | 说明 | 必需 | 默认值 |
|------|--------|------|------|--------|
| `--access-id` | `-i` | 奥点云访问ID | ✅ | - |
| `--access-key` | `-k` | 奥点云访问密钥 | ✅ | - |
| `--base-url` | `-u` | API基础URL | ❌ | `http://apaas-api.jstest.aodianyun.cn` |
| `--domain` | `-d` | 奥点云域名 | ❌ | `jstest.aodianyun.cn` |
| `--help` | `-h` | 显示帮助信息 | ❌ | - |

## 🌍 环境变量支持

您也可以通过环境变量设置配置：

```bash
# Linux/macOS
export AODIANYUN_ACCESS_ID="xxxx"
export AODIANYUN_ACCESS_KEY="xxxxxx"
export AODIANYUN_BASE_URL="http://apaas-api.jstest.aodianyun.cn"
export AODIANYUN_DOMAIN="jstest.aodianyun.cn"

# Windows PowerShell
$env:AODIANYUN_ACCESS_ID="xxx"
$env:AODIANYUN_ACCESS_KEY="xxxxx"
$env:AODIANYUN_BASE_URL="http://apaas-api.jstest.aodianyun.cn"
$env:AODIANYUN_DOMAIN="jstest.aodianyun.cn"

# Windows CMD
set AODIANYUN_ACCESS_ID=xxxxx
set AODIANYUN_ACCESS_KEY=xxxxxx
set AODIANYUN_BASE_URL=http://apaas-api.jstest.aodianyun.cn
set AODIANYUN_DOMAIN=jstest.aodianyun.cn
```

## 📝 使用示例


### 查看帮助
```bash
npx aodianyun-lcps-mcp --help
```

## 🔧 MCP 工具说明

### 1. 创建活动导播台工程

**工具名**: `create_active_lcps_project`

**参数**:
- `title` (string): 工程标题
- `inputNum` (number): 信源数目 (4, 5, 6, 7, 8)
- `resolution` (string): 分辨率 (720p, 1080p)
- `useHours` (number): 使用时长（小时），默认1小时
- `subType` (string): 固定值 "alcps"
- `remarks` (string, 可选): 备注信息（可选，默认自动生成resolution和inputNum的组合）

**功能**: 创建新的活动导播台工程，返回工程ID

### 2. 开启活动导播台工程

**工具名**: `open_active_lcps_project`

**参数**:
- `projectId` (number): 工程ID
- `expiresTime` (number): 到期时间（秒级时间戳）
- `subType` (string): 固定值 "alcps"

**功能**: 开启指定的导播台工程，返回LCPS地址

### 3. 关闭活动导播台工程

**工具名**: `close_active_lcps_project`

**参数**:
- `projectId` (string): 工程ID
- `subType` (string): 固定值 "alcps"

**功能**: 关闭指定的导播台工程

### 4. 删除活动导播台工程

**工具名**: `delete_active_lcps_project`

**参数**:
- `projectId` (string): 工程ID
- `subType` (string): 固定值 "alcps"

**功能**: 删除指定的导播台工程

### 5. 获取活动导播台工程列表

**工具名**: `get_active_lcps_project_list`

**参数**:
- `num` (number): 每页数目，默认10，最大100
- `page` (number): 页数，默认1
- `subType` (string): 固定值 "alcps"

**返回数据**:
- 工程列表详细信息
- 总工程数量
- 每个工程的状态、创建时间等信息

### 6. 获取活动导播台中控页面

**工具名**: `get_active_lcps_control_page`

**参数**:
- `projectId` (number): 工程ID
- `subType` (string): 固定值 "alcps"

**返回数据**:
- 中控页面访问链接
- 认证信息（ID和SecretKey）

### 7. 获取LCPS认证Token

**工具名**: `get_lcps_auth_token`

**参数**:
- `id` (string): LCPS实例ID
- `secretKey` (string): LCPS密钥
- `pathname` (string): 认证路径，默认为"/getToken"
- `projectId` (number, 可选): 工程ID（用于自动获取认证信息）
- `subType` (string): 固定值 "alcps"

**功能**: 获取LCPS认证Token，支持自动解析认证信息

**返回数据**:
- 认证Token信息（validate, timestamp, rand）
- 解析出的认证参数

### 8. 设置信道参数

**工具名**: `set_channel`

**参数**:
- `lcpsAddr` (string): LCPS地址（支持带http/https协议或不带协议的格式）
- `channel` (number): 信道号（1-16，对应API的0-15）
- `keepRatio` (boolean, 可选): 是否保持视频比例
- `playURL` (array, 可选): 拉流地址数组
- `inputType` (string): 输入类型，默认"拉流"
- `allowPublishForce` (boolean): 是否允许强制发布，默认false
- `firstBufferTime` (number): 首次缓冲时间（秒），默认0
- `maxBufferTime` (number): 最大缓冲时间（秒），默认1
- `smoothMode` (boolean): 平滑模式，默认false
- `enableLowLatency` (boolean): 启用低延迟，默认false
- `id` (string, 可选): LCPS实例ID（从get_active_lcps_control_page获取）
- `secretKey` (string, 可选): LCPS密钥（从get_active_lcps_control_page获取）
- `projectId` (number, 可选): 工程ID（用于自动获取认证信息）

**功能**: 一次性设置多个信道参数，包括视频比例、输入源和缓冲时间

**支持的lcpsAddr格式**:
- `http://mcx0emt6-20250710143054-1011.lcps.jstest.aodianyun.cn`
- `https://mcx0emt6-20250710143054-1011.lcps.jstest.aodianyun.cn`
- `mcx0emt6-20250710143054-1011.lcps.jstest.aodianyun.cn`

**执行的操作**:
1. 设置视频保持比例（如果提供keepRatio参数）
2. 切换输入源（如果提供playURL参数）
3. 设置缓冲时间（always执行）

### 9. 设置导播台输出地址

**工具名**: `set_output_address`

**参数**:
- `lcpsAddr` (string): LCPS地址（从open_active_lcps_project返回的lcpsAddr）
- `publishURL` (array): 推流地址数组
- `formatIndex` (number): 格式索引，默认0
- `notRestart` (boolean): 是否不重启，默认false
- `enable` (boolean): 是否启用，默认true
- `playURL` (string): 播放地址，默认为空
- `videoSize` (string): 视频尺寸，默认"1920x1080"
- `videoBitrate` (string): 视频码率，默认"3000k"
- `videoCBR` (boolean): 视频CBR模式，默认false
- `qmin` (number): 最小量化参数，默认2
- `qmax` (number): 最大量化参数，默认1024
- `gop` (number): GOP大小，默认3
- `audioBitrate` (string): 音频码率，默认"128k"
- `audioOnly` (boolean): 仅音频模式，默认false
- `enableDelayPublish` (boolean): 启用延迟发布，默认false
- `delayPublishTime` (number): 延迟发布时间（秒），默认120
- `delayPublishURL` (array): 延迟发布地址数组，默认为空
- `publishToLPS` (boolean): 发布到LPS，默认false
- `videoRecord` (boolean): 视频录制，默认false
- `lossless` (boolean): 无损模式，默认false
- `hdr` (boolean): HDR模式，默认false
- `pixfmt` (string): 像素格式，默认"yuv420"
- `hdrtype` (string): HDR类型，默认"HLG"
- `id` (string, 可选): LCPS实例ID（从get_active_lcps_control_page获取）
- `secretKey` (string, 可选): LCPS密钥（从get_active_lcps_control_page获取）
- `projectId` (number, 可选): 工程ID（用于自动获取认证信息）

**功能**: 配置导播台输出流参数，支持多种编码和发布选项

## 🔐 API 接口说明

### 鉴权规则

所有请求都需要在请求头中包含以下参数：

- `X-AccessId`: 系统分配的访问者身份标识
- `X-TimeStamp`: 时间戳（1970年1月1日0点到当前的秒数）
- `X-SignatureNonce`: 随机字符串
- `X-Signature`: 签名（MD5加密）

### 签名生成规则

```
stringToSign = X-AccessId + "\n" + X-AccessKey + "\n" + X-SignatureNonce + "\n" + X-TimeStamp + "\n" + body
X-Signature = md5(stringToSign)  // 32位小写
```

### LCPS认证

对于LCPS相关操作，需要额外的认证头：

- `x-validate`: 认证验证值
- `x-timestamp`: 认证时间戳
- `x-rand`: 认证随机数

## 📊 返回格式

所有接口都返回统一的格式：

```javascript
{
  "flag": 100,                    // 状态码（100：成功；!=100：失败）
  "flagString": "success",        // 提示信息
  "data": {                       // 返回数据（可选）
    "id": 411                     // 工程ID等
  }
}
```

## ⚠️ 注意事项

1. **安全性**：不要在命令行中暴露敏感信息，建议使用环境变量
2. **网络**：确保网络可以访问奥点云API
3. **权限**：确保accessId和accessKey有足够的权限
4. **版本**：确保使用最新版本的Node.js
5. **认证**：LCPS操作需要正确的认证信息，支持自动获取
6. **域名**：支持自定义域名配置，默认为jstest.aodianyun.cn

## 🔍 故障排除

### 常见错误

1. **缺少参数**
   ```
   ❌ 缺少必要的配置参数
   ```
   解决：提供 `-i` 和 `-k` 参数

2. **网络错误**
   ```
   API请求出错
   ```
   解决：检查网络连接和API地址

3. **鉴权失败**
   ```
   flag: 401
   ```
   解决：检查accessId和accessKey是否正确

4. **版本兼容性**
   ```
   npx: command not found
   ```
   解决：使用指定版本运行 `npx aodianyun-lcps-mcp@1.0.20`

5. **LCPS认证失败**
   ```
   LCPS认证失败
   ```
   解决：检查工程ID和认证信息是否正确

## 🛠️ 开发

### 本地开发

```bash
# 克隆项目
git clone <repository-url>
cd aodianyun-lcps-mcp

# 安装依赖
npm install

# 开发模式
npm run dev

# 运行测试
npm test
```

### 构建

```bash
npm run build
```

## 📄 许可证

MIT License

## 🤝 贡献

欢迎提交 Issue 和 Pull Request！

## 📞 支持

如果遇到问题，请：
1. 运行 `npx aodianyun-lcps-mcp --help` 查看帮助
2. 检查网络连接
3. 验证API凭据
4. 查看控制台错误信息
5. 尝试指定版本运行 `npx aodianyun-lcps-mcp@1.0.20` 