关于 UnificAlly MCP
UnificAlly MCP 将 AI 助手连接到 UnificAlly API,通过模型目录生成和编辑媒体、转录音频及放大媒体。它适合希望在 MCP 客户端中通过一个 API 密钥使用这些操作,并跟踪任务和控制支出的用户。
主要功能
- 01生成视频和图像
- 02制作音乐、语音和音效
- 03转录及清理音频
- 04编辑和延长视频
- 05放大图像和视频
- 06跟踪任务、模型和费用
适用场景
- 01生成图像并将其用作视频起始帧
- 02转录音频或将文本转为语音
- 03查询生成任务状态或估算费用
MCP 相关
该 MCP 服务将 UnificAlly API 操作以工具形式提供,涵盖媒体生成、编辑、任务管理、模型查询、文件上传和费用检查。它支持 stdio 和 Streamable HTTP,并提供托管端点。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.unifically.com/mcpclaude mcp add --transport http unifically https://mcp.unifically.com/mcp{"mcpServers":{"unifically":{"type":"http","url":"https://mcp.unifically.com/mcp"}}}在 Cursor 中打开{"servers":{"unifically":{"type":"http","url":"https://mcp.unifically.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"unifically":{"type":"http","url":"https://mcp.unifically.com/mcp"}}}{"mcpServers":{"unifically":{"serverUrl":"https://mcp.unifically.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.unifically.com/mcp需要授权工具
14| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| prompt | string | 是 | 描述所需视频的文本提示词。 |
| model | string | 否 | 模型,可使用简短别名或完整 ID。别名:'veo'(默认)、'veo-quality'、'veo-lite'、'kling'、'kling-omni'、'hailuo'、'seedance'、'grok-video'、'grok-1.5'。也支持 'google/veo-3.1-fast' 等完整 ID。调用 list_models 查看目录,并阅读模型文档页面以了解其确切参数。 |
| duration | integer | 否 | 视频时长(秒)。省略时使用模型默认值。允许的值因模型而异。 |
| aspect_ratio | string | 否 | 输出宽高比,例如 '16:9'。各模型支持的比例不同,有些模型不支持此参数。 |
| image_url | string | 否 | 图生视频的可选起始帧。此工具会将其映射到所选模型所需的字段,因此请在此处传入,而不要使用模型自身的字段名。必须是公开的 https URL,不能是本地路径或内嵌的 base64。对于本地文件,请先使用直接 PUT 上传到 files.unifically.com/upload,然后传入返回的 file_url。 |
| end_image_url | string | 否 | 可选的结束帧(起始帧与结束帧之间的插值)。仅部分模型支持。必须是公开的 https URL,不能是本地路径或内嵌的 base64。对于本地文件,请先使用直接 PUT 上传到 files.unifically.com/upload,然后传入返回的 file_url。 |
| reference_image_urls | array | 否 | 可选的风格/主体参考图像,每张都必须是公开的 https URL(请先上传本地文件,不能使用路径或 base64)。支持情况、最大数量以及能否与起始帧组合使用,均因模型而异。 |
| seed | integer | 否 | 可选的可复现输出种子。在支持的模型上,相同种子和相同输入会产生相同结果。 |
| wait | boolean | 否 | 默认值为 true:等待任务完成并返回结果。设为 false 可立即获取 task_id,并使用 get_task 轮询;适用于耗时较长的任务(高质量视频、完整歌曲),或连接可能超时的情况。 |
| callback_url | string | 否 | 可选的 Webhook URL。设置后,工具会立即返回 task_id,并在任务完成时将结果 POST 到此 URL。Webhook 请求体:{ task_id, status: 'completed'|'failed', data: { video_url | image_url | audio_url | ... }, error_message? } — 请注意,媒体位于 'data' 下,而非 'output'。适用于长时间运行的任务,可替代等待。 |
| confirm_cost | boolean | 否 | 仅当操作员启用了支出保护时才相关。调用金额超过配置的确认阈值时,会返回报价;使用 confirm_cost: true 重试即可继续。否则可忽略。 |
| provider_options | object | 否 | 用于传入未作为命名参数公开的模型专属字段(例如 Kling multi_shots、Flux steps)。这些字段会合并到 API 的 'input' 负载中。拒绝以下字段:此工具已管理的字段(prompt、媒体 URL、task_id 等),以及保留的路由/计费/身份验证键(model、callback_url、dry_run、api_key、authorization)。请使用 'model' 参数切换模型,而不要在此处切换。各模型的字段请参阅 https://docs.unifically.com。 |
详细介绍
UnificAlly MCP 服务
面向 UnificAlly API 的 MCP 服务。它让 AI 助手通过一个 API 密钥,使用 100 多种模型(Veo 3.1、Kling、Seedance、Hailuo、Grok Imagine、Nano Banana、Flux、GPT Image、Suno、ElevenLabs、Topaz)生成视频、图像、音乐、语音和音效,转录音频并提升媒体分辨率。
它适用于任何 MCP 客户端:Cursor、Claude Desktop、Claude Code、Cline、Windsurf、Zed、ChatGPT Desktop、Goose、n8n,以及你自己的代码。
安装
- 在 https://unifically.com/api-keys 创建 API 密钥。新账号会获得 $0.50 余额,可用于测试。
- 将服务添加到客户端配置中:
{
"mcpServers": {
"unifically": {
"command": "npx",
"args": ["-y", "@unifically/mcp-server"],
"env": { "UNIFICALLY_API_KEY": "sk-..." }
}
}
}
该代码块可直接用于 Cursor(.cursor/mcp.json)、Claude Desktop(claude_desktop_config.json)、Cline 和 Windsurf(~/.codeium/windsurf/mcp_config.json)。保存后重启客户端。
Claude Code:
claude mcp add unifically -e UNIFICALLY_API_KEY=sk-... -- npx -y @unifically/mcp-server
其他客户端
Zed(~/.config/zed/settings.json):
{
"context_servers": {
"unifically": {
"command": { "path": "npx", "args": ["-y", "@unifically/mcp-server"] },
"env": { "UNIFICALLY_API_KEY": "sk-..." }
}
}
}
ChatGPT Desktop:依次选择 Settings、Connectors、Add MCP server。使用命令 npx -y @unifically/mcp-server,并设置 UNIFICALLY_API_KEY 变量。
Goose、n8n 或任何支持 stdio 的工具:
UNIFICALLY_API_KEY=sk-... npx -y @unifically/mcp-server
在 Windows 上,如果客户端提示 npx not found,请使用 "command": "cmd", "args": ["/c", "npx", "-y", "@unifically/mcp-server"]。
此外,还提供托管服务 https://mcp.unifically.com/mcp,供接受 URL 的客户端使用。请参阅远程服务。
示例
向助手提出需求:
生成一张 16:9 的黄昏灯塔图像,然后生成一段以该图像为起始画面的 6 秒视频。
它会按顺序调用工具:
{ "name": "generate_image", "arguments": { "prompt": "a lighthouse at dusk, waves, warm light", "aspect_ratio": "16:9" } }
Generated image with google/nano-banana-pro. Result: https://files.unifically.com/image/....png [task_id: 7f3c...]
{ "name": "generate_video", "arguments": { "prompt": "slow push in, waves rolling", "image_url": "https://files.unifically.com/image/....png", "duration": 6 } }
每个生成工具都会等待任务完成并返回媒体 URL。结构化结果如下:
{
task_id: string,
status: "completed" | "pending" | "processing",
output: { video_url?, image_url?, audio_url?, image_urls?, audio_urls?, text? }, // when completed
model: string,
cost_usd?: number
}
在底层,每次调用都会向 UnificAlly API 发送一个请求(POST /v1/tasks,包含 { model, input },然后调用 GET /v1/tasks/{id}),与 API 文档中所示的方式相同。
工具
| 工具 | 功能 | 是否消耗余额 |
|---|---|---|
generate_video | 文本或图像转视频(Veo、Kling、Hailuo、Seedance、Grok 等)。可选起始帧和结束帧、参考图像。 | 是 |
generate_image | 文本转图像和图像编辑(Nano Banana、GPT Image、Flux、Qwen、Kling、Grok、SeeDream)。 | 是 |
generate_audio | 文本转语音、音效、对话、转录(stt)、语音转换(voice-changer)、音频清理(voice-isolation)。 | 是 |
generate_music | Suno:创作歌曲,或对现有曲目执行 cover、extend、add-vocals、add-instrumental 或 stems。 | 是 |
edit_video | 根据提示词编辑现有片段,或将动作迁移到主体图像上(motion-control)。 | 是 |
upscale_media | 使用 Topaz 处理任意图像或视频(image_url / video_url),或为 Veo 和 Grok 升级工具提供 task_id。 | 是 |
extend_video | 延长已完成的 Veo(+8 s)或 Grok Imagine 生成内容。 | 是 |
upload_file | 将 URL 或 stdio 服务上的本地文件转换为公共 CDN URL。 | 否 |
get_task | 根据 id 获取任务状态和结果,可选择等待任务完成。 | 否 |
list_tasks | 按状态、模型、类别、提供方或时间筛选任务,并按时间倒序显示。 | 否 |
list_resources | ElevenLabs(默认)、Kling 和 Veo 的语音列表。 | 否 |
list_models | 模型目录及别名。 | 否 |
dry_run_cost | 查询调用价格,但不实际运行。 | 否 |
check_balance | 以 USD 计的账户余额。 | 否 |
每个工具都会设置全部四个 MCP 提示。七个会消耗余额的工具均标记为 destructiveHint: true 和 idempotentHint: false,因此,即使客户端会自动批准只读工具,也仍会在付费运行前征求确认。生成失败不会收费。
支持的模型及其参数、id 和浏览器试用页面:
- 视频:Veo 3.1、Kling、Seedance、MiniMax Hailuo、Grok Imagine、Wan 3.0、Gemini Omni Flash 1.1
- 图像:Nano Banana、GPT Image 2、Flux.2 Pro、Qwen Image、SeeDream
- 音乐和音频:Suno、ElevenLabs
- 升级:Topaz Labs
list_models 会返回完整的实时目录。
工作方式
- 每个生成工具仅通过
prompt工作。model为可选项,可使用短别名(veo、kling、flux、nano-banana-2、seedance、tts、sfx、stt)或完整 ID,例如google/veo-3.1-fast。 - 媒体字段(
image_url、image_urls、end_image_url、reference_image_urls、audio_url、video_url)仅接受公开的 https URL。本地路径或 base64 字符串会触发错误,提示先上传。 - 不同模型的字段名称各不相同(Kling 使用
start_frame_url,Veo 使用start_image_url,Seedance 使用first_frame_url)。你传入image_url,服务会将其重命名。服务不支持的字段参数应放在provider_options中,该参数也会覆盖映射。 - 服务不会保存各模型支持的时长、分辨率或宽高比。API 会检查参数值,并返回指出如何修正的 422 错误,且不收取费用。服务指令会要求助手在运行模型前阅读其在
docs.unifically.com/llms.txt中的页面。 - 每个生成工具还接受
wait、callback_url、provider_options和confirm_cost。 - 错误以一句话返回:缺少密钥或密钥错误时返回 401,余额不足时返回 402(附充值链接),参数验证失败时返回包含 API 验证消息的 422;超时消息会提示助手使用
get_task继续。遇到 429、5xx 和网络错误时,会采用退避策略重试。
上传
模型只能读取公开 URL,因此本地文件会先上传到 UnificAlly CDN。
-
upload_file { content_type: "image/png" }会返回一次性upload_url和最终的file_url。助手使用 curl 发送字节数据,shell 中不会包含任何 API 密钥:curl -X PUT '<upload_url>' --data-binary @photo.pngURL 经过签名,只能使用一次,并会在约 5 分钟后过期。文件会保持完整质量。
-
upload_file { url }会导入已经在线的文件。 -
upload_file { file_path }会从磁盘读取文件,但仅限服务在本地通过 stdio 运行时使用。
不支持 base64 上传,且指令会要求助手绝不将用户的文件发送到其他主机。这两条规则都源于实际发生过的失误:由于 base64 大小限制,Agent 曾缩小用户的图片以满足要求;还有一个 shell 中没有密钥的 Agent 曾将私人照片上传到公开文件托管服务。
长时任务
高质量视频和完整歌曲可能需要几分钟才能完成。
wait: false会立即返回{ task_id, status: "pending" }。轮询get_task,直到status为"completed"。callback_url也会立即返回,API 会将结果 POST 到你的 webhook。
任何任务都可以稍后通过 get_task 获取。
支出限制
默认情况下,所有限制均关闭。可按部署设置:
UNIFICALLY_CONFIRM_COST_ABOVE=<usd>:价格高于此金额的调用会返回报价,只有助手使用confirm_cost: true重试后才会运行。UNIFICALLY_MAX_COST_PER_TASK=<usd>:价格高于此金额的调用会被拒绝。confirm_cost无法覆盖此限制。UNIFICALLY_BLOCKED_MODELS=veo-quality,suno或UNIFICALLY_ALLOWED_MODELS=nano-banana-2,flux,tts:限制可运行的模型。UNIFICALLY_DISABLE_GENERATION=true:只读模式。浏览、dry_run_cost和check_balance仍可使用。
环境变量
| 变量 | 必填 | 默认值 |
|---|---|---|
UNIFICALLY_API_KEY | 仅 stdio 必填 | 无。HTTP 调用方自行提供密钥。UNIFICALLY_KEY、UNIFICALLY_TOKEN 和 UNIFICALLY_API_TOKEN 也可使用。 |
UNIFICALLY_BASE_URL | 否 | https://api.unifically.com |
UNIFICALLY_FILES_BASE_URL | 否 | https://files.unifically.com |
UNIFICALLY_REQUEST_TIMEOUT_MS | 否 | 60000 |
UNIFICALLY_MAX_RETRIES | 否 | 3 |
UNIFICALLY_POLL_TIMEOUT_MS | 否 | 600000 |
UNIFICALLY_POLL_START_MS | 否 | 2000 |
UNIFICALLY_POLL_MAX_MS | 否 | 10000 |
UNIFICALLY_CONFIRM_COST_ABOVE | 否 | 关闭 |
UNIFICALLY_MAX_COST_PER_TASK | 否 | 关闭 |
UNIFICALLY_BLOCKED_MODELS | 否 | 无 |
UNIFICALLY_ALLOWED_MODELS | 否 | 无 |
UNIFICALLY_DISABLE_GENERATION | 否 | false |
MCP_TRANSPORT | 否 | stdio(或 http) |
UNIFICALLY_HTTP_WAIT_BUDGET_MS | 否 | 85000,HTTP 调用在返回 task_id 前等待的最长时间 |
PORT | 否 | 由托管平台设置 |
UNIFICALLY_CORS_ORIGIN | 否 | * |
UNIFICALLY_TRUSTED_PROXIES | 否 | loopback。也允许使用 private、精确 IP 或 CIDR,它们可发送 X-Forwarded-For。 |
UNIFICALLY_TRUST_CF_CONNECTING_IP | 否 | false |
UNIFICALLY_RATE_PER_MIN | 否 | 每个密钥和账户每分钟 120 个请求 |
UNIFICALLY_RATE_BURST | 否 | 40 |
UNIFICALLY_PUBLIC_DISCOVERY | 否 | true。允许无密钥调用方运行 initialize、tools/list、resources/list 和 ping。设为 0 可要求所有操作都提供密钥。 |
UNIFICALLY_ANON_RATE_PER_MIN | 否 | 每个 IP 每分钟 30 个无密钥请求 |
UNIFICALLY_ANON_RATE_BURST | 否 | 12 |
远程服务
MCP_TRANSPORT=http 会在 /mcp 上提供 Streamable HTTP,并在 GET /sse + POST /messages 上提供旧版 SSE。托管版本运行于 https://mcp.unifically.com/mcp。
每个调用方都发送自己的密钥,因此一个部署即可服务多个用户,并从各自的余额中扣费:
Authorization: Bearer <key>(推荐)X-API-Key: <key>?api_key=<key>,适用于只能接收 URL 的客户端。查询字符串可能会出现在代理日志中,因此尽可能使用请求头。
{
"mcpServers": {
"unifically": {
"url": "https://mcp.unifically.com/mcp",
"headers": { "Authorization": "Bearer sk-..." }
}
}
}
对于 claude.ai(Settings、Connectors、Add custom connector),请将密钥放入 URL:https://mcp.unifically.com/mcp?api_key=sk-...。对于仅支持 stdio 的客户端,可使用 mcp-remote 进行桥接:
{
"mcpServers": {
"unifically": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.unifically.com/mcp", "--header", "Authorization: Bearer sk-..."]
}
}
}
HTTP 模式详情:
- Streamable HTTP 为无状态模式,因此可在任何反向代理后扩展,无需粘性会话。
- 无密钥的调用方可以运行
initialize、tools/list、resources/list、prompts/list和ping,以便目录读取工具列表。其他所有操作都会返回 401。无密钥流量按 IP 限速,并发消息数上限为 16。GET /.well-known/mcp-config会返回仅包含一个必填设置(api_key)的 JSON Schema,GET /.well-known/mcp/server-card.json会返回工具列表。 - 密钥会向 API 验证,验证结果会缓存;此外,每个 IP 都有失败验证次数上限。限速按密钥和账户分别执行,因此增加密钥不会提高单个账户的限额。批次最多包含 16 条消息,请求正文最大为 512 KB。
- 浏览器的
Origin请求头会经过 DNS 重绑定验证。MCP 客户端不会发送该请求头,因此不受影响。 - 仅信任来自
UNIFICALLY_TRUSTED_PROXIES的X-Forwarded-For。提供的 Compose 文件会为其隔离网络设置private;请勿在共享 LAN 上使用该设置。 - 余额为零的密钥仍可查询余额、列出和获取任务,以及查询作业价格,但无法启动作业(402)。
GET /会返回连接说明,GET /health是无需身份验证的健康检查。
自托管
此仓库提供了 Dockerfile 和 docker-compose.yml,可通过每个请求的密钥运行 HTTP 传输。将容器置于 HTTPS 反向代理之后,将域名指向该容器,并使用 /health 进行健康检查。无需设置任何环境变量。对于共享部署,UNIFICALLY_CONFIRM_COST_ABOVE=1.00 是一个合理的默认值。
开发
git clone https://github.com/unifically-dev/unifically-mcp.git
cd unifically-mcp
npm install
cp .env.example .env # add your UNIFICALLY_API_KEY
npm run dev
交互式检查工具:
npx @modelcontextprotocol/inspector npx -y tsx src/index.ts
测试:
npm test # build + smoke test
npm run test:vitest # full suite
故障排查
| 症状 | 解决方法 |
|---|---|
spawn npx ENOENT | Node 不在 PATH 中。在客户端配置中使用 node 和 dist/index.js 的绝对路径。 |
401 Unauthorized | 客户端的 env 块中缺少 UNIFICALLY_API_KEY。编辑后重启客户端。 |
402 Payment Required | 前往 https://unifically.com/payments 充值。 |
| 工具调用卡住 | 对于时长较长的视频或完整歌曲:传入 wait: false 或 callback_url。 |
| 客户端未显示工具 | 运行 npx @modelcontextprotocol/inspector npx -y @unifically/mcp-server。如果工具在检查器中显示,则客户端配置 JSON 格式错误。 |
链接
- API 文档:https://docs.unifically.com
- API 密钥:https://unifically.com/api-keys
- 模型:https://unifically.com/models
- MCP 页面:https://unifically.com/mcp
- 支持:[email protected],Discord
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。