{"apiVersion":"v1","directorySlug":"liblib-mcp-50a6717a62","title":"LibTV","description":"LibTV - 专业视频创作工具","pageUrl":"https://www.mcpbundles.com/skills/liblib-mcp-50a6717a62","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://liblib.tv/api/mcp","hostedMcpUrl":null,"toolCount":40,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"tv.liblib/liblib-mcp-50a6717a62","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"build_glb_task","description":"用 Three.js 源码构建 GLB 三维模型（云端沙箱执行 + 渲染导出）。","inputSchema":{"type":"object","required":["user_id","input_url"],"properties":{"engine":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"input_url":{"type":"string"},"session_id":{"type":"string"},"business_type":{"type":"number"},"source_sha256":{"type":"string"}}},"logicalName":"build_glb_task","displayName":"build_glb_task","title":"build_glb_task","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"calculate_task_power","description":"根据任务类型和参数预估所需算力消耗，参数要求同 create_generation_task；媒体引用使用 {{nodeKey}} 协议，不要传媒体 URL 或 imageList/videoList/audioList。","inputSchema":{"type":"object","required":["user_id","task_type","provider","model","params"],"properties":{"model":{"type":"string"},"params":{"type":"string"},"user_id":{"type":"number"},"metadata":{"type":"string"},"provider":{"type":"string"},"task_type":{"type":"string"}}},"logicalName":"calculate_task_power","displayName":"calculate_task_power","title":"calculate_task_power","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"cancel_remote_mcp_structured_task","description":"[Infra] Cancel a structured REMOTE MCP task.","inputSchema":{"type":"object","required":["task_id","remote_mcp_context"],"properties":{"task_id":{"type":"string"},"remote_mcp_context":{"type":"string"}}},"logicalName":"cancel_remote_mcp_structured_task","displayName":"cancel_remote_mcp_structured_task","title":"cancel_remote_mcp_structured_task","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"copy_canvas_nodes","description":"将 resource_canvas_id 中的节点浅拷贝到 target_canvas_id。会校验 user_id 对源画布有读权限、对目标画布有写权限；复制 NodeKey/Name/Type/Data/Tag/Desc/ToolKey/ToolID，不复制连接、位置、布局、任务关联。node_keys 为源画布真实 nodeKey。后续生成任务必须使用返回的 target_node_key。","inputSchema":{"type":"object","required":["resource_canvas_id","target_canvas_id","user_id","node_keys"],"properties":{"team_id":{"type":"number"},"user_id":{"type":"number"},"node_keys":{"type":"string"},"target_canvas_id":{"type":"string"},"resource_canvas_id":{"type":"string"}}},"logicalName":"copy_canvas_nodes","displayName":"copy_canvas_nodes","title":"copy_canvas_nodes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_asset","description":"创建素材；等价于 /canvas/media-asset/create。folder_id 必填且大于 0。由 canvas_id + node_key 读取画布节点 data 并保存到素材 data.items。","inputSchema":{"type":"object","required":["user_id","name","folder_id","canvas_id","node_key"],"properties":{"name":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"number"},"team_id":{"type":"number"},"user_id":{"type":"number"},"node_key":{"type":"string"},"canvas_id":{"type":"string"},"cover_url":{"type":"string"},"folder_id":{"type":"number"},"asset_type":{"type":"number"},"request_id":{"type":"string"},"visibility":{"type":"number"}}},"logicalName":"create_asset","displayName":"create_asset","title":"create_asset","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_asset_folder","description":"创建素材库文件夹；等价于 /canvas/folder/create 且固定 spaceType=MEDIA_ASSET。","inputSchema":{"type":"object","required":["user_id","name"],"properties":{"name":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"cover_url":{"type":"string"},"parent_id":{"type":"number"},"request_id":{"type":"string"}}},"logicalName":"create_asset_folder","displayName":"create_asset_folder","title":"create_asset_folder","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_canvas","description":"创建一个新的画布项目","inputSchema":{"type":"object","required":["name","user_id"],"properties":{"name":{"type":"string"},"type":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"cover_url":{"type":"string"},"folder_id":{"type":"number"},"project_space_id":{"type":"number"}}},"logicalName":"create_canvas","displayName":"create_canvas","title":"create_canvas","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_generation_task","description":"创建一个生成任务（图片/视频/音频/文本）。任务创建后系统会自动轮询进度并返回最终结果，无需手动查询进度。会返回与当前任务关联的节点node_key，基于当前的结果进行create_generation_task的时候需要将node_key作为参数source_node_keys的内容进行提供。调用前请根据 model 参数的模型目录选择合适的 task_type + provider + model 组合，并传入该模型支持的 params。生成任务的同时生成新节点，不需要再额外调用节点创建工具。注意：params 参数类型是 string，必须传 JSON.stringify 后的 JSON 字符串，不要直接传 JSON 对象；例如 params=\"{\\\"prompt\\\":\\\"一只香蕉\\\",\\\"n\\\":1}\"。","inputSchema":{"type":"object","required":["user_id"],"properties":{"tag":{"type":"string"},"desc":{"type":"string"},"mode":{"type":"string"},"model":{"type":"string"},"dryRun":{"type":"boolean"},"params":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"node_key":{"type":"string"},"provider":{"type":"string"},"canvas_id":{"type":"string"},"node_meta":{"type":"string"},"task_type":{"type":"string"},"user_uuid":{"type":"string"},"agent_name":{"type":"string"},"request_id":{"type":"string"},"session_id":{"type":"string"},"task_title":{"type":"string"},"callback_url":{"type":"string"},"media_protocol":{"enum":["url","resource_v1"],"type":"string"},"script_node_key":{"type":"string"},"if_updated_at_ms":{"type":"number"},"source_node_keys":{"type":"string"},"hide_created_nodes":{"type":"boolean"},"remote_mcp_context":{"type":"string"},"reuse_clip_node_key":{"type":"string"},"hide_created_clip_node":{"type":"boolean"},"attach_source_node_keys":{"type":"string"}}},"logicalName":"create_generation_task","displayName":"create_generation_task","title":"create_generation_task","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_group_with_nodes","description":"在指定画布上一次性创建一个分组(GroupNode)，把画布上【已存在】的节点并入该分组，并可同时新建组内素材子节点，最后把分组连接到参考节点下游。新建子节点类型仅支持 image/video/audio，每个元素需给出 name/type/url。组内顺序写入分组的 data.childNodeIds：node_key_list 在前，node_data_list 新建的在后。⚠️ 并入既有节点时会清理它们的上游：删掉这些节点的【全部入边】，并删掉其中作为上游的【视频合成节点】（连带该节点的所有连线）。节点位置由前端布局，后端不写坐标。返回 group_node_key 与 child_node_key_list。","inputSchema":{"type":"object","required":["user_id","canvas_id","title"],"properties":{"team_id":{"type":"number"},"user_id":{"type":"number"},"canvas_id":{"type":"string"},"session_id":{"type":"string"},"node_key_list":{"type":"array"},"node_data_list":{"type":"array"},"reference_node_key":{"type":"string"}}},"logicalName":"create_group_with_nodes","displayName":"create_group_with_nodes","title":"create_group_with_nodes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"create_remote_mcp_structured_task","description":"[Infra] Create an idempotent structured REMOTE MCP task in the LibTV Task domain.","inputSchema":{"type":"object","required":["remote_mcp_context","arguments_json"],"properties":{"arguments_json":{"type":"string"},"remote_mcp_context":{"type":"string"}}},"logicalName":"create_remote_mcp_structured_task","displayName":"create_remote_mcp_structured_task","title":"create_remote_mcp_structured_task","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"edit_canvas_tidy","description":"【剪辑落定后的画布收尾】删掉流水线中间产物,并补一条「视频合成节点 → 最终成片」的直连边。内部顺序固定为【先连边、后删节点】:中间节点一旦消失,成片与视频合成节点之间的路径就断了(那条路径全程经过中间节点),所以必须先补上直连边。连边失败则整个收尾放弃,不会删任何东西。connect_from / connect_to 出现在 delete_node_keys 里会被自动剔除 —— 宁可少删,也不能把 keeper 删掉。由 canda 在最后一段编译成功后调用,agent 不必自己填。","inputSchema":{"type":"object","required":["canvas_id","user_id"],"properties":{"user_id":{"type":"number"},"canvas_id":{"type":"string"},"connect_to":{"type":"string"},"connect_from":{"type":"string"},"attach_node_keys":{"type":"string"},"delete_node_keys":{"type":"string"}}},"logicalName":"edit_canvas_tidy","displayName":"edit_canvas_tidy","title":"edit_canvas_tidy","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"edit_replace_node_media","description":"【把媒体产物搬到另一个节点上】剪辑流水线(composite → overlay → layered → subtitle)每段各建自己的输出节点,中间产物是隐藏的。本工具把某一段的产物搬进【常驻可见】的那个成片节点,让用户边跑边看,而不是等整条流水线跑完才见到东西。\n搬的是三件套:data.url、data._resourceMeta、data.taskInfo.taskResult —— 只改 url 不行,画布重开时前端按 taskResult 再套一遍会把它冲回旧值。产物 schema 从来源节点原样拷,不重新构造。\n目标节点的其他字段(clipTimelineData / params / name / taskInfo 状态位)一律不动。由 canda 在每段完成后调用,agent 不必自己填。","inputSchema":{"type":"object","required":["canvas_id","user_id","node_key","from_node_key"],"properties":{"width":{"type":"number"},"height":{"type":"number"},"team_id":{"type":"number"},"user_id":{"type":"number"},"node_key":{"type":"string"},"canvas_id":{"type":"string"},"duration_sec":{"type":"number"},"from_node_key":{"type":"string"}}},"logicalName":"edit_replace_node_media","displayName":"edit_replace_node_media","title":"edit_replace_node_media","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"edit_upload_overlay_html","description":"【把覆盖层 HTML 上传成 URL】剪辑流水线的花字/贴画层由 canda 自己编译成 HTML,要以 URL 形态进 compose 的 textList(media-platform 的 textList 收 htmlUrl,渲染由它内部做)。\n本工具只上传、不渲染、不建节点 —— 与 render_overlay 那条路的区别就在这里:那条会渲成透明 webm 再建一个画布节点,这条只返回 html_url。\n由 canda 在编译覆盖层时调用,agent 不必自己填。","inputSchema":{"type":"object","required":["canvas_id","user_id","html"],"properties":{"html":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"canvas_id":{"type":"string"}}},"logicalName":"edit_upload_overlay_html","displayName":"edit_upload_overlay_html","title":"edit_upload_overlay_html","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"edit_write_clip_subtitles","description":"【逐素材写字幕轨】为视频合成节点上每个源素材各写一份字幕 HTML,cue 时间是【该素材的本地时间】。剪辑器按 sourceNodeId 做「源时间↔时间轴时间」换算,所以只有逐素材的字幕位置才对得上;成片里的硬字幕不受本工具影响。由 canda 在时间轴写完之后调用,agent 不必自己填。","inputSchema":{"type":"object","required":["canvas_id","user_id","node_key","subtitles"],"properties":{"user_id":{"type":"number"},"node_key":{"type":"string"},"canvas_id":{"type":"string"},"subtitles":{"type":"string"},"subtitle_style":{"type":"string"},"word_highlight":{"type":"boolean"},"vertical_anchor":{"type":"string"},"subtitle_template":{"type":"string"}}},"logicalName":"edit_write_clip_subtitles","displayName":"edit_write_clip_subtitles","title":"edit_write_clip_subtitles","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"edit_write_clip_timeline","description":"【把剪辑方案写进视频合成节点】剪辑 agent 把内部方案(IR)翻译成前端剪辑器认识的时间轴数据后,由本工具落盘到该节点的 data.clipTimelineData。用户打开剪辑器即可看到分段、小窗、音轨,导出时走的还是原来的 compose 接口。\n写入会保住节点上已有的字幕指针(subtitleHtmlUrl / subtitleUrl 会重新贴到新片段上)——字幕是先写的、时间轴是后写的,整份覆盖会把字幕轨抹掉。由 canda 在整条流水线成功后调用,agent 不必自己填。","inputSchema":{"type":"object","required":["canvas_id","user_id","node_key","clip_timeline"],"properties":{"user_id":{"type":"number"},"node_key":{"type":"string"},"canvas_id":{"type":"string"},"clip_timeline":{"type":"string"},"keep_subtitle_pointers":{"type":"boolean"}}},"logicalName":"edit_write_clip_timeline","displayName":"edit_write_clip_timeline","title":"edit_write_clip_timeline","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"fetch_skill_owner","description":"Resolve who owns a skill key: returns userId and teamId. Looks up skill_draft first, then skill, and returns the first hit. Returns identifiers only — no skill content. Not for the main agent.","inputSchema":{"type":"object","required":["skill_key"],"properties":{"skill_key":{"type":"string"}}},"logicalName":"fetch_skill_owner","displayName":"fetch_skill_owner","title":"fetch_skill_owner","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"ffmpeg_execute","description":"执行 FFmpeg 命令对媒体文件进行后处理（拼接、合并音视频、裁剪、转码等）。input_urls 中的文件会被下载到本地，ffmpeg_args 中使用 {input_0}、{input_1} 等占位符引用输入文件，使用 {output} 引用输出文件。工具会自动替换占位符为实际本地路径，执行 FFmpeg 命令，并将输出上传到 OSS 返回公开 URL。任务异步执行，系统会自动轮询进度并返回最终结果，无需手动查询进度。","inputSchema":{"type":"object","required":["user_id","input_urls","ffmpeg_args"],"properties":{"team_id":{"type":"number"},"user_id":{"type":"number"},"input_urls":{"type":"array","items":{"type":"string"}},"output_ext":{"type":"string"},"ffmpeg_args":{"type":"string"}}},"logicalName":"ffmpeg_execute","displayName":"ffmpeg_execute","title":"ffmpeg_execute","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_asset_detail","description":"查询素材详情。asset_uuid 与 asset_id 二选一；asset_uuid 优先。返回完整素材元数据。","inputSchema":{"type":"object","required":["user_id"],"properties":{"team_id":{"type":"number"},"user_id":{"type":"number"},"asset_id":{"type":"number"},"asset_uuid":{"type":"string"}}},"logicalName":"get_asset_detail","displayName":"get_asset_detail","title":"get_asset_detail","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_canvas_node_context","description":"围绕用户选中的画布节点构建局部上下文：先做 k-hop 邻域扩展，再对扩展出的所有节点追溯上游直到 root，并对节点和 source->target 关联去重。返回仅包含节点关键信息、产物信息和节点关联，不返回完整 data/布局/连接编辑字段。","inputSchema":{"type":"object","required":["canvas_id","user_id","node_keys"],"properties":{"k":{"type":"number"},"team_id":{"type":"number"},"user_id":{"type":"number"},"canvas_id":{"type":"string"},"max_nodes":{"type":"number"},"node_keys":{"type":"string"},"max_ancestor_depth":{"type":"number"}}},"logicalName":"get_canvas_node_context","displayName":"get_canvas_node_context","title":"get_canvas_node_context","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_canvas_node_details","description":"按 node_key 列表查询画布节点详情。node_keys 为英文逗号分隔；可选 with_connections=true|1 时附带指向这些节点的连线（target 落在 node_keys 内）。默认不返回节点 raw data；dryRun=true 时已有产物仍正常返回，无产物节点会返回 reminder 提示当前模式下不需要校验产物；include_agent_params=true 时按节点入边上游组装并返回 agent_task_params —— 媒体用 nodeKeyOrderedList、prompt 用 {{nodeKey}}，可直接改动后传给 create_generation_task(mode=update)（仅生成器节点有值；转换服务未配置时不返回该字段）。include_node_config=true 返回的 node_config 已废弃（媒体是 URL、prompt 是位置占位符，不能用于改参数），请改用 include_agent_params。include_artifact=true 时媒体返回有序 resource_ids，文本返回","inputSchema":{"type":"object","required":["canvas_id","user_id","node_keys"],"properties":{"dryRun":{"type":"boolean"},"team_id":{"type":"number"},"user_id":{"type":"number"},"canvas_id":{"type":"string"},"node_keys":{"type":"string"},"include_artifact":{"type":"boolean"},"with_connections":{"type":"string"},"include_node_config":{"type":"boolean"},"include_agent_params":{"type":"boolean"},"include_image_content":{"type":"boolean"}}},"logicalName":"get_canvas_node_details","displayName":"get_canvas_node_details","title":"get_canvas_node_details","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_canvas_nodes_view","description":"获取指定画布的节点产物视图，用于盘点资产/章节画布中的节点、产物与上游来源。批量返回轻量字段(output/name/tag/desc/sources)，媒体 output 以 resource_id 为内容身份；单节点详查请传 node_key，并可设 include_detail 返回完整 data。支持 node_type 逗号分隔过滤(如 image,video,text,reference,script_table,script_v2,video_clip)；name 模糊、tag 精确匹配","inputSchema":{"type":"object","required":["canvas_id","user_id"],"properties":{"tag":{"type":"string"},"name":{"type":"string"},"limit":{"type":"number"},"team_id":{"type":"number"},"user_id":{"type":"number"},"node_key":{"type":"string"},"canvas_id":{"type":"string"},"node_type":{"type":"string"},"include_detail":{"type":"boolean"},"require_output":{"type":"boolean"},"include_position":{"type":"boolean"}}},"logicalName":"get_canvas_nodes_view","displayName":"get_canvas_nodes_view","title":"get_canvas_nodes_view","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_generation_task_progress","description":"查询一个或多个生成任务的进度，返回每个任务的状态、进度百分比和结果。同时将结果更新到节点信息中，无需在调用节点的更新能力。返回信息中有当前对应node_key信息，基于当前的结果进行create_generation_task的时候需要将node_key作为参数提供。后续 create_generation_task 引用本结果时只需要使用返回的 node_key，例如在 prompt 中写 {{node_key}}，不要复制 task_result 里的媒体 URL，也不要构造 imageList/videoList/audioList。失败时按 retry_mode 决定动作：verbatim=原样重试，after_fix=改提示词/参数后重试，none=不要重试。failed_category=UNKNOWN 表示这条失败还没有归类，此时**必须读 failed_reason_raw（下游原始报错）**再决定怎么办，不要只看 failed_reason 的兜底文案就原样重发；failed_reason_raw 缺失说明下游连原因都没给（多为超时），原样重试一次即可。","inputSchema":{"type":"object","required":["user_id","task_ids"],"properties":{"locale":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"task_ids":{"type":"string"}}},"logicalName":"get_generation_task_progress","displayName":"get_generation_task_progress","title":"get_generation_task_progress","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_group_execution_plan","description":"查询 GroupNode 内所有可执行节点的拓扑执行计划。返回按 DAG 依赖关系排好序的节点列表，每个节点附带 task_type、provider、model 等信息以及上下游依赖关系。Agent 应按 plan 数组顺序逐个调用 create_generation_task 执行，上一个任务完成后再执行下一个。某节点失败时，根据其 downstream_node_keys 跳过所有下游依赖节点。","inputSchema":{"type":"object","required":["user_id","canvas_id","group_node_key"],"properties":{"team_id":{"type":"number"},"user_id":{"type":"number"},"canvas_id":{"type":"string"},"group_node_key":{"type":"string"}}},"logicalName":"get_group_execution_plan","displayName":"get_group_execution_plan","title":"get_group_execution_plan","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_remote_mcp_task_snapshot","description":"[Infra] Read the authoritative LibTV Task snapshot for a REMOTE MCP invocation.","inputSchema":{"type":"object","required":["task_id","remote_mcp_context"],"properties":{"task_id":{"type":"string"},"remote_mcp_context":{"type":"string"}}},"logicalName":"get_remote_mcp_task_snapshot","displayName":"get_remote_mcp_task_snapshot","title":"get_remote_mcp_task_snapshot","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_session_power","description":"查询某个会话(session)下累计消耗的积分。仅统计任务成功的消耗，失败/超时不计入。","inputSchema":{"type":"object","required":["session_id"],"properties":{"session_id":{"type":"string"}}},"logicalName":"get_session_power","displayName":"get_session_power","title":"get_session_power","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_studio_detail","description":"根据摄影棚UUID获取详情，包含元信息与配置JSON","inputSchema":{"type":"object","required":["studio_uuid","user_id"],"properties":{"team_id":{"type":"number"},"user_id":{"type":"number"},"studio_uuid":{"type":"string"}}},"logicalName":"get_studio_detail","displayName":"get_studio_detail","title":"get_studio_detail","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_tool_spec_by_key","description":"按 tool_key 查询工具定义全量数据。出参（JSON）：name 工具名称, type 工具生成的产物类型, tool_key 工具唯一key, metadata 工具参数说明，如果有参数说明，则传参数要遵循metadata中的枚举，不可编造；查不到返回错误。返回的description代表metadata后续的使用参考案例。在调用nodes_connections_batch创建节点的时候一定要对taskInfo中的taskId进行赋值。如果用户不做强调，enableSound字段默认为on","inputSchema":{"type":"object","required":["user_id","tool_key"],"properties":{"user_id":{"type":"number"},"tool_key":{"type":"string"}}},"logicalName":"get_tool_spec_by_key","displayName":"get_tool_spec_by_key","title":"get_tool_spec_by_key","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_asset_library_entries","description":"按前端素材库目录视图查询素材文件夹和素材文件；等价于 /canvas/folder/entries 且固定 spaceTypes=[MEDIA_ASSET]。返回 entries 与 total。","inputSchema":{"type":"object","required":["user_id"],"properties":{"name":{"type":"string"},"page":{"type":"number"},"team_id":{"type":"number"},"user_id":{"type":"number"},"end_time":{"type":"number"},"order_by":{"type":"string"},"user_ids":{"type":"array","items":{"type":"number"}},"folder_id":{"type":"number"},"page_size":{"type":"number"},"asset_type":{"type":"number"},"start_time":{"type":"number"},"only_folder":{"type":"boolean"},"create_before":{"type":"number"},"include_children":{"type":"boolean"}}},"logicalName":"list_asset_library_entries","displayName":"list_asset_library_entries","title":"list_asset_library_entries","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_asset_tags","description":"查询当前素材标签列表；返回默认标签与当前个人/团队自定义标签。","inputSchema":{"type":"object","required":["user_id"],"properties":{"team_id":{"type":"number"},"user_id":{"type":"number"}}},"logicalName":"list_asset_tags","displayName":"list_asset_tags","title":"list_asset_tags","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"list_canvas","description":"查询画布项目列表。须指定 project_space_id 或 folder_id 其一（>0）；可用 name 按名称模糊查询；不需要分页；type 支持 normal/asset/preset/all，all 表示不按画布类型过滤","inputSchema":{"type":"object","required":["user_id"],"properties":{"name":{"type":"string"},"type":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"order_by":{"type":"string"},"folder_id":{"type":"number"},"project_space_id":{"type":"number"}}},"logicalName":"list_canvas","displayName":"list_canvas","title":"list_canvas","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"nodes_connections_batch","description":"批量增删改画布节点与连接。传入 canvas_id、user_id，选择对应的操作create，update，delete，并传入node数组和connection数组（均为 JSON 数组字符串）。create 模式下调用方必须传入真实 nodeKey 和 connectionId；nodeKey 使用节点类型前缀+nanoid，connectionId 使用 e- 前缀+nanoid。","inputSchema":{"type":"object","required":["canvas_id","user_id"],"properties":{"nodes":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"canvas_id":{"type":"string"},"operation":{"type":"string"},"connections":{"type":"string"}}},"logicalName":"nodes_connections_batch","displayName":"nodes_connections_batch","title":"nodes_connections_batch","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"parse_text_file","description":"从URL下载文件并提取文本内容。支持格式：纯文本、PDF、DOCX。","inputSchema":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"max_chars":{"type":"number"}}},"logicalName":"parse_text_file","displayName":"parse_text_file","title":"parse_text_file","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"save_skill_biz","description":"Create or update a Skill.","inputSchema":{"type":"object","required":["user_id"],"properties":{"name":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"biz_type":{"type":"number"},"skill_key":{"type":"string"},"markdown_content":{"type":"string"}}},"logicalName":"save_skill_biz","displayName":"save_skill_biz","title":"save_skill_biz","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_asset_library_entries","description":"按名称搜索素材库文件夹和素材文件；等价于 /canvas/folder/search 且固定 spaceTypes=[MEDIA_ASSET]。返回 entries 与 total。","inputSchema":{"type":"object","required":["name","user_id"],"properties":{"name":{"type":"string"},"page":{"type":"number"},"type":{"type":"number"},"team_id":{"type":"number"},"user_id":{"type":"number"},"order_by":{"type":"string"},"folder_id":{"type":"number"},"page_size":{"type":"number"},"search_target":{"type":"number"},"include_children":{"type":"boolean"}}},"logicalName":"search_asset_library_entries","displayName":"search_asset_library_entries","title":"search_asset_library_entries","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"search_canvas_nodes","description":"在 project_space 或单画布范围内按条件搜索节点，返回精简 nodes 列表与 total。须传 project_space_id 或 canvas_id 其一；传 project_space_id 时 name/tag/node_type/nodeKeys/parentKeys/childKeys 至少一个非空。","inputSchema":{"type":"object","required":["user_id"],"properties":{"tag":{"type":"string"},"name":{"type":"string"},"page":{"type":"number"},"limit":{"type":"number"},"team_id":{"type":"number"},"user_id":{"type":"number"},"nodeKeys":{"type":"array","items":{"type":"string"}},"pageSize":{"type":"number"},"canvas_id":{"type":"string"},"childKeys":{"type":"array","items":{"type":"string"}},"node_type":{"type":"string"},"parentKeys":{"type":"array","items":{"type":"string"}},"project_space_id":{"type":"number"}}},"logicalName":"search_canvas_nodes","displayName":"search_canvas_nodes","title":"search_canvas_nodes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"stop_generation_task","description":"停止/取消用户的生成任务（批量，单次最多 20 个）。**这是不可逆的破坏性操作**：任务一旦取消不能恢复，已消耗的算力不退还，用户会丢失这次生成的产物。\n**仅在用户用自然语言明确要求停止/取消/不要了时才可调用。** 以下情况一律禁止调用：任务跑得慢、进度长时间不动、你判断参数写错了想重来、你想省算力、你想换个模型重试、用户只是询问进度或抱怨慢。这些场景请如实告知用户现状并等待用户指示；需要新结果时直接 create_generation_task 新建，**不要**先取消旧任务。\n调用前必须已从用户处得到取消意图，并把 confirmed_by_user 设为 true、reason 填成用户的原话或其准确转述。若你无法指出用户在哪一句里要求了取消，就不要调用本工具。\n返回的每一项都带 state：cancelled=下游已确认取消；local_only=该任务类型下游不支持中止，已在系统内标记为取消但下游可能仍在后台跑完；already_finished=任务已结束无需取消；not_found=任务不存在或无权操作；downstream_rejected=下游拒绝（多为任务已完","inputSchema":{"type":"object","required":["user_id","task_ids","session_id","confirmed_by_user","reason"],"properties":{"reason":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"task_ids":{"type":"string"},"session_id":{"type":"string"},"confirmed_by_user":{"type":"boolean"}}},"logicalName":"stop_generation_task","displayName":"stop_generation_task","title":"stop_generation_task","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"submit_agent_task_result","description":"写入 agent_task 的最终结果或失败原因。由 agent-tool-svc 在 Agent 完成/失败时调用；task_id 与 user_id 由上游经 baggage 自动注入，不由模型填写。\nstatus=completed 时用 image_urls / video_urls / audio_urls / texts 直接填产物，不要自己拼 task_result JSON —— 落库形状由本工具按 LibTV 契约组装。四者与 result_node_key 至少一个非空，否则本工具报错：产物为空的任务落库后画布节点会显示「完成」却没有任何内容。status=failed 不做此校验。\n产物已经落在某个画布节点上时，改传 result_node_key，不必把 URL 抄一遍 —— 它优先级最高。","inputSchema":{"type":"object","required":["task_id","user_id","status"],"properties":{"texts":{"type":"array","items":{"type":"string"}},"result":{"type":"string"},"source":{"type":"string"},"status":{"type":"string"},"task_id":{"type":"string"},"user_id":{"type":"number"},"audio_urls":{"type":"array","items":{"type":"string"}},"image_urls":{"type":"array","items":{"type":"string"}},"video_urls":{"type":"array","items":{"type":"string"}},"failed_reason":{"type":"string"},"result_node_key":{"type":"string"}}},"logicalName":"submit_agent_task_result","displayName":"submit_agent_task_result","title":"submit_agent_task_result","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_canvas","description":"更新已有画布的名称、描述或封面","inputSchema":{"type":"object","required":["canvas_id","user_id"],"properties":{"name":{"type":"string"},"type":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"canvas_id":{"type":"string"},"cover_url":{"type":"string"},"folder_id":{"type":"number"},"project_space_id":{"type":"number"}}},"logicalName":"update_canvas","displayName":"update_canvas","title":"update_canvas","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"update_node","description":"更新单个画布节点的元信息（name / tag / desc），仅更新提供的字段，不影响 data/position/status 等。节点须已存在。用于修改节点属性，标记废弃节点等操作","inputSchema":{"type":"object","required":["canvas_id","user_id","node_key"],"properties":{"tag":{"type":"string"},"desc":{"type":"string"},"name":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"node_key":{"type":"string"},"canvas_id":{"type":"string"}}},"logicalName":"update_node","displayName":"update_node","title":"update_node","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"upsert_skill_draft","description":"Save a Skill draft — creates it when there is none yet, otherwise updates the existing one. A draft is a long-lived workspace: edits land in the draft and never touch the live skill or the community square, so this tool is safe to call whenever the user asks to change a skill. Pass skill_key with the key of the skill being worked on (the live skill's key or a draft's own key, both accepted) — its draft is then created or patched. Omit skill_key only for a brand-new skill; in that case name / des","inputSchema":{"type":"object","required":["user_id"],"properties":{"name":{"type":"string"},"team_id":{"type":"number"},"user_id":{"type":"number"},"cover_url":{"type":"string"},"skill_key":{"type":"string"},"input_type":{"type":"string"},"request_id":{"type":"string"},"session_id":{"type":"string"},"result_type":{"type":"number"},"skill_files":{"type":"string"},"use_scenario":{"type":"string"},"show_markdown":{"type":"boolean"},"output_content":{"type":"string"},"markdown_content":{"type":"string"},"primary_skill_file_path":{"type":"string"}}},"logicalName":"upsert_skill_draft","displayName":"upsert_skill_draft","title":"upsert_skill_draft","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=LibTV&config=eyJ1cmwiOiAiaHR0cHM6Ly9saWJsaWIudHYvYXBpL21jcCJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22LibTV%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fliblib.tv%2Fapi%2Fmcp%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22LibTV%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fliblib.tv%2Fapi%2Fmcp%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=LibTV&connectorUrl=https%3A%2F%2Fliblib.tv%2Fapi%2Fmcp"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"LibTV\" --url \"https://liblib.tv/api/mcp\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/liblib-mcp-50a6717a62","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/liblib-mcp-50a6717a62/tools/{tool}","mcpServerUrl":"https://liblib.tv/api/mcp","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/liblib-mcp-50a6717a62?live=1"}