"use client"; import { useCallback, useEffect, useState } from "react"; import { toast } from "sonner"; type KeyItem = { id: string; name: string; tokenPrefix: string; scopes: string[]; revokedAt: string | null; expiresAt: string | null }; export default function TVstarPluginPage() { const [keys, setKeys] = useState([]); const [createdToken, setCreatedToken] = useState(""); const [busy, setBusy] = useState(false); const [origin, setOrigin] = useState("https://ai.yydd.ai"); useEffect(() => { setOrigin(window.location.origin); }, []); const loadKeys = useCallback(async () => { const response = await fetch("/api/user/access-keys", { cache: "no-store" }); const data = await response.json(); if (!response.ok || !data.success) throw new Error(data.error || "读取密钥失败"); setKeys(Array.isArray(data.data) ? data.data : []); }, []); useEffect(() => { void loadKeys().catch(error => toast.error(error.message)); }, [loadKeys]); const createKey = async () => { setBusy(true); try { const response = await fetch("/api/user/access-keys", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name: "TVstar MCP", scopes: ["canvas:read", "canvas:write"], expiresInDays: 90 }) }); const data = await response.json(); if (!response.ok || !data.success || !data.data?.token) throw new Error(data.error || "创建密钥失败"); setCreatedToken(data.data.token); await loadKeys(); toast.success("密钥已创建;请立即复制,关闭后不会再次显示"); } catch (error) { toast.error(error instanceof Error ? error.message : "创建密钥失败"); } finally { setBusy(false); } }; const revokeKey = async (id: string) => { if (!window.confirm("撤销后使用此密钥的 Agent 将失去画布访问权限,确定继续吗?")) return; setBusy(true); try { const response = await fetch(`/api/user/access-keys/${id}`, { method: "DELETE" }); const data = await response.json(); if (!response.ok || !data.success) throw new Error(data.error || "撤销失败"); setCreatedToken(""); await loadKeys(); toast.success("密钥已撤销"); } catch (error) { toast.error(error instanceof Error ? error.message : "撤销失败"); } finally { setBusy(false); } }; const example = JSON.stringify({ mcpServers: { tvstar: { command: "node", args: ["/替换为解压目录/tvstar-mcp/mcp-server.mjs"], env: { YEDIR_BASE_URL: origin, YEDIR_ACCESS_TOKEN: "粘贴新创建的 Access Key" } } } }, null, 2); return

TVstar Plugin

让 Agent 操作视频画布

当前插件提供画布列表、读取和有版本保护的节点操作。视频生成与合成仍由 TVstar 画布内的任务系统执行,MCP 暂未提供直接发起生成的工具。

1. 下载并安装

需要 Node.js 20 或更新版本。解压后在 tvstar-mcp 目录运行:

下载 TVstar MCP 安装包
cd tvstar-mcp{"\n"}npm ci

2. 创建画布 Access Key

读取和修改画布需要对应权限。密钥只在创建时显示一次。

{createdToken ?

{createdToken}

: null}

3. 配置支持 STDIO MCP 的 Agent

将安装包的绝对路径和密钥填入客户端配置。不同 Agent 的配置文件位置和外层字段可能不同,请以所用客户端的说明为准。

{example}

已创建的 Access Key

{keys.length ? keys.map(key =>
{key.name} · {key.tokenPrefix} · {key.revokedAt ? "已撤销" : "有效"}{!key.revokedAt ? : null}
) :

暂无密钥

}
; }