这是一个与 OpenAI 的 Sora 2 API 集成的 Model Context Protocol (MCP) 服务器,用于视频生成和混音。
git clone https://github.com/Doriandarko/sora-mcp
cd sora-mcp
npm install
npm run build
claude_desktop_config.example.json 复制到 ~/Library/Application Support/Claude/claude_desktop_config.jsonargs 路径以匹配您的安装目录OPENAI_API_KEY 字段中添加您的 OpenAI API 密钥DOWNLOAD_DIR 到您首选的下载文件夹此项目包括两种不同的用例服务器实现:
stdio-server.ts - 适用于 Claude Desktopserver.ts - 适用于远程访问为什么有两个服务器? 不同的 MCP 客户端使用不同的传输方式。这种分离使得代码针对每种传输类型保持干净和优化。
当配置好后,Claude Desktop 会自动启动服务器。只需确保:
.env 文件中有您的 OPENAI_API_KEY配置使用 src/stdio-server.ts,它通过 stdio 进行通信。
在开发模式下运行服务器并自动重新加载:
npm run dev
或者在生产模式下运行:
npm run build
npm start
服务器已经配置好了!
设置:
配置位于:~/Library/Application Support/Claude/claude_desktop_config.json
它使用编译后的服务器并通过环境变量传递您的 API 密钥:
{
"mcpServers": {
"sora-server": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/sora-mcp/dist/stdio-server.js"],
"env": {
"OPENAI_API_KEY": "your-openai-api-key-here",
"DOWNLOAD_DIR": "/Users/yourname/Downloads/sora"
}
}
}
}
参见 claude_desktop_config.example.json 获取完整的示例。
环境变量:
OPENAI_API_KEY(必需) - 您的 OpenAI API 密钥DOWNLOAD_DIR(可选) - 自定义下载文件夹(默认为 ~/Downloads)如何使用:
使用 MCP Inspector 测试您的服务器:
npx @modelcontextprotocol/inspector
然后连接到:http://localhost:3000/mcp
claude mcp add --transport http sora-server http://localhost:3000/mcp
code --add-mcp '{"name":"sora-server","type":"http","url":"http://localhost:3000/mcp"}'
使用 stdio 传输添加到您的 Cursor MCP 设置(类似于上面的 Claude Desktop 配置)。
从文本提示生成视频。
参数:
prompt(必需):要生成的视频的文字描述model(可选):使用的模型(默认:"sora-2")seconds(可选):视频时长(秒,默认:"4")size(可选):分辨率("宽度x高度",默认:"720x1280")input_reference(可选):参考图像/视频的路径示例:
{
"prompt": "一只花斑猫在舞台上弹钢琴",
"model": "sora-2",
"seconds": "8",
"size": "1024x1808"
}
检查视频生成任务的状态和进度。
参数:
video_id(必需):要检查的视频的 ID示例:
{
"video_id": "video_123"
}
返回值: 包括 progress(0-100)、status(queued/processing/completed)以及完成时间戳的视频状态。
分页列出所有视频生成任务。
参数:
limit(可选):要检索的视频数量(默认:20)after(可选):分页游标 - 获取此 ID 后的视频order(可选):排序顺序 "asc" 或 "desc"(默认:"desc")示例:
{
"limit": 10,
"order": "desc"
}
获取一个 curl 命令以手动下载已完成的视频。
参数:
video_id(必需):要下载的视频的 IDvariant(可选):要下载的格式(默认为 MP4)示例:
{
"video_id": "video_123"
}
返回值: 用于下载视频的带有身份验证的 curl 命令。
自动下载并保存已完成的视频到您的计算机。
参数:
video_id(必需):要保存的视频的 IDoutput_path(可选):保存到的目录(默认为 ~/Downloads)filename(可选):自定义文件名(默认为 video_id.mp4)示例:
{
"video_id": "video_123",
"filename": "my-cat-video.mp4"
}
返回值: 视频保存的文件路径。无需手动命令!
使用新的提示对现有的视频进行混音。
参数:
video_id(必需):要混音的已完成视频的 IDprompt(必需):混音的新文字提示示例:
{
"video_id": "video_123",
"prompt": "扩展场景,让猫向欢呼的观众鞠躬"
}
删除视频任务及其资源。
参数:
video_id(必需):要删除的视频的 ID示例:
{
"video_id": "video_123"
}
创建视频 → 返回一个 video_id
"创建一个日落山脉的视频"
检查状态 → 监控进度
"检查视频 video_123 的状态"
准备就绪时保存 → 自动下载视频文件
"保存视频 video_123"
Claude 将自动将其下载到您的下载文件夹!
清理 → 删除旧视频
"删除视频 video_123"
{
"id": "video_123",
"object": "video",
"model": "sora-2",
"status": "queued",
"progress": 0,
"created_at": 1712697600,
"size": "1024x1808",
"seconds": "8",
"quality": "standard"
}
{
"id": "video_456",
"object": "video",
"model": "sora-2",
"status": "queued",
"progress": 0,
"created_at": 1712698600,
"size": "720x1280",
"seconds": "8",
"remixed_from_video_id": "video_123"
}
服务器包含全面的错误处理:
sora-mcp/
├── src/
│ └── server.ts # 主服务器实现
├── dist/ # 编译后的 JavaScript(生成)
├── package.json # 依赖项和脚本
├── tsconfig.json # TypeScript 配置
├── .env # 环境变量(不在 Git 中)
└── README.md # 本文档
npm run dev - 在开发模式下运行(使用 tsx)npm run build - 将 TypeScript 编译为 JavaScriptnpm start - 运行编译后的 JavaScriptOPENAI_API_KEY(必需) - 您的 OpenAI API 密钥PORT(可选) - 服务器端口(默认:3000)MIT