{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T19:32:43.851Z","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs","markdownUrl":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs.md","server":{"slug":"superlcr-bilibili-huasheng-video","name":"io.github.superlcr/bilibili-huasheng-video","registryName":"io.github.superlcr/bilibili-huasheng-video","description":"Script to finished Bilibili video with Huasheng: storyboard, narration, footage, export, publish.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"superlcr-hs","type":"npm","identifier":"@superlcr/hs","withdrawn":false,"url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs","version":"0.6.2","transport":"stdio","scoredAt":"2026-11-05T06:05:32.537Z"},"score":{"total":82,"tier":"high trust","status":"scored","weekDelta":-1,"history":[{"date":"2026-11-05","total":82},{"date":"2026-11-04","total":83},{"date":"2026-11-03","total":68},{"date":"2026-11-02","total":83},{"date":"2026-11-01","total":83},{"date":"2026-10-31","total":83},{"date":"2026-10-30","total":83},{"date":"2026-10-29","total":83},{"date":"2026-10-28","total":83},{"date":"2026-10-27","total":83},{"date":"2026-10-26","total":83},{"date":"2026-10-25","total":83},{"date":"2026-10-24","total":83},{"date":"2026-10-23","total":83},{"date":"2026-10-22","total":83},{"date":"2026-10-21","total":83},{"date":"2026-10-20","total":57},{"date":"2026-10-19","total":83},{"date":"2026-10-18","total":83},{"date":"2026-10-17","total":83},{"date":"2026-10-16","total":83},{"date":"2026-10-15","total":83},{"date":"2026-10-14","total":83},{"date":"2026-10-13","total":82},{"date":"2026-10-12","total":82},{"date":"2026-10-11","total":81},{"date":"2026-10-04","total":82},{"date":"2026-10-03","total":81},{"date":"2026-10-02","total":76},{"date":"2026-10-01","total":80}]},"categories":[{"name":"Supply Chain Security","score":100,"verdict":"pass","reasons":["No malware found by supply-chain analysis.","No known CVEs affecting this package version or its production dependencies.","No install/post-install scripts declared.","0 of 4 dependencies flagged as unhealthy."],"codes":[{"code":"supplychain.malware_clean","args":{}},{"code":"cve.none","args":{}},{"code":"installscript.none","args":{}},{"code":"dephealth.assessed","args":{"deps":"4","unhealthy":"0"}}]},{"name":"Provenance & Transparency","score":32,"verdict":"fail","reasons":["Source repository is publicly reachable at the declared URL.","Provenance check failed: no build-provenance attestation is published.","Licence could not be checked: the licence is shipped as a file inside the package, not declared as a standard (SPDX) licence identifier, so we cannot tell whether it is OSI-approved.","Actively maintained (last published 1 days ago).","Security-disclosure policy not yet verified: we couldn't inspect the source repository."],"codes":[{"code":"provenance.repo_verified","args":{}},{"code":"provenance.none","args":{}},{"code":"license.inconclusive","args":{"reason":"license_file_only"}},{"code":"maintenance.recent","args":{"age_days":"1"}},{"code":"disclosure.repo_inconclusive","args":{"reason":"policy_probe_unavailable"}}]},{"name":"Schema Quality & AI Usability","score":77,"verdict":"fail","reasons":["100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).","AI-judged instruction clarity (good).","Context-footprint check failed: tool/resource definitions use about 6516 tokens (~181/item across 36 items; 33 tools + 3 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.descriptions","args":{"pct":"100"}},{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_heavy","args":{"avg":"181","items":"36","tools":"33","tokens":"6516","resources":"3"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":100,"verdict":"pass","reasons":["No destabilizing schema changes in the last 30 days."],"codes":[{"code":"stability.stable","args":{}}]},{"name":"Tool Coverage","score":99,"verdict":"partial","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","96% of tool parameters carry a description.","Structured output schemas are declared (100% of tools); any adoption earns full credit."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"96"}},{"code":"toolquality.output_present","args":{"pct":"100"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.","An AI judge read all 35 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_declared","args":{"pct":"100","annotated":"4","destructive":"4"}},{"code":"toolsafety.manipulation_clean","args":{"units":"35","judged":"35"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.","Supports UI / widget rendering."],"codes":[{"code":"protocol.supported","args":{"latest":"2026-07-28","version":"2025-11-25"}},{"code":"cap.ui_supported","args":{}}]}],"inconclusive":["Licence could not be checked: the licence is shipped as a file inside the package, not declared as a standard (SPDX) licence identifier, so we cannot tell whether it is OSI-approved.","Security-disclosure policy not yet verified: we couldn't inspect the source repository."],"malware":[],"components":[{"slug":"superlcr-hs","type":"npm","identifier":"@superlcr/hs","withdrawn":false,"score":82,"current":true,"url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs","markdownUrl":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs.md"}],"facts":[{"label":"Registry","value":"npm"},{"label":"Package","value":"@superlcr/hs"},{"label":"Version","value":"0.6.2"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"huasheng_login","title":"Sign in to Huasheng","description":"Has the user sign in to Huasheng: they approve on a Bilibili page in their own browser. **Their password never passes through us**; only a token comes back. Use it when a tool reports NO_CREDENTIAL or an expired session. The first call returns pending=true (not a failure) and authorize_url; call again to check, or with code as that result explains.","inputs":[{"name":"code","type":"string","required":false,"description":"The 127.0.0.1 address the browser ended on after approving, when it would not load"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":119},{"name":"huasheng_get_account","title":"Check credits and sign-in status","description":"Shows the credit balance and when the next batch of credits expires. Use it before starting work to check there is enough, or to confirm the situation when another tool reports low credits or no sign-in. At zero credits even a one-word edit is refused. Changes nothing.","inputs":[],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":65},{"name":"huasheng_create_project","title":"Start a new video","description":"Hands a one-line idea or a full script to Huasheng and starts a video. **The video itself is free** — credits are spent when the storyboard is approved, and up front for any material Huasheng has to read. Afterwards you normally call huasheng_wait_for_project while it plans or asks a question. Do not infer a narrator voice from the topic, language, audience, or tone. Omit voice unless the user explicitly supplied an exact voice already available in their Huasheng account. **This is not idempotent**: calling it twice with the same arguments makes two videos. Never retry after check_state — it may have worked; a local validation error says nothing was created: fix the arguments.","inputs":[{"name":"aspect","type":"string","required":false,"description":"Landscape or portrait. Omit for the default"},{"name":"audio","type":"string","required":false,"description":"Narration recording (mp3/wav/flac/mp4/m4a): local file or public http(s) URL without login. hs uploads it and keeps this voice; never request an internal storage address"},{"name":"fast","type":"boolean","required":false,"description":"Priority for this project only; default false. Costs extra at execution and may still queue."},{"name":"locale","type":"string","required":false,"description":"Content language of the video. en-US makes an English video; omit for Chinese."},{"name":"material","type":"array","required":false,"description":"Candidate footage: local files, public URLs without login, or library ids. New files are imported; reading video costs credits by the second, reported in the result. A pool to choose from, **not a re…"},{"name":"preference_id","type":"integer","required":false,"description":"Saved preference id; wins over style_note"},{"name":"script","type":"string","required":false,"description":"Text mode: a one-line idea or a complete script — both go here. Huasheng reads it and decides how to proceed. Give either script or audio, not both"},{"name":"style_note","type":"string","required":false,"description":"A style note for this video only, such as \"plain-spoken, slightly fast\". It does not affect other videos"},{"name":"transcript","type":"string","required":false,"description":"Audio mode only, optional: the word-for-word transcript of the recording. Omit it and Huasheng transcribes the recording itself"},{"name":"voice","type":"string","required":false,"description":"An exact narrator voice name already available in this account. Never infer one from gender, topic, language, audience, or tone; omit for the default"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":480},{"name":"huasheng_video_generation_options","title":"Video models and credit estimates","description":"Read-only: models; price a form or explicit clip+video_generation with pid; status recovers/tracks the latest hs generation by pid. Generate with generate_clip_video; forms use answer_question.","inputs":[{"name":"action","type":"string","required":true,"description":null},{"name":"clip","type":"integer","required":false,"description":"Price target; requires settings."},{"name":"pid","type":"integer","required":false,"description":"Required for price or status."},{"name":"video_generation","type":"object","required":false,"description":null}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":91},{"name":"huasheng_generate_clip_video","title":"Generate a clip video (spends credits)","description":"Generate and apply video to one clip in a READY project using exact settings. Spends credits. Returns acceptance; track operation.id with wait_for_action, never repeat generate to poll. Pending forms use answer_question.","inputs":[{"name":"clip","type":"integer","required":true,"description":"Clip position or stable id."},{"name":"pid","type":"integer","required":true,"description":"The 15-digit video id; no default."},{"name":"video_generation","type":"object","required":true,"description":null}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":90},{"name":"huasheng_answer_question","title":"Answer Huasheng’s question (may spend credits)","description":"Answers a batch of questions only as a whole: one answer per question; a partial batch is rejected. Copy option text or answer freely. Storyboard approval uses huasheng_confirm_plan. This waits until Huasheng moves on. For a new, separate decision, make that decision and continue within authorization; otherwise show complete questions/options or plan_requirements/cost_points and wait. Never ask for confirmation without showing the decision. Video forms: video_generation alone confirms (answers optional); plain text cancels/revises. Models/pricing: video_generation_options.","inputs":[{"name":"answers","type":"array","required":false,"description":"Answers in question order."},{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"pid","type":"integer","required":true,"description":"The 15-digit video id; no default."},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."},{"name":"video_generation","type":"object","required":false,"description":null}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":193},{"name":"huasheng_ask_agent","title":"Ask Huasheng for a change","description":"Asks Huasheng for a change in your own words — \"make it livelier\", \"cut it to a minute\", \"try a different opening\". **This is not how you answer a question.** When the video is PAUSED waiting on you, use huasheng_answer_question; using this instead leaves the question hanging forever. To reword one specific clip, huasheng_edit_clip is faster and more precise — this tool handles open-ended requests. Set clip or animation to anchor words such as 'this' and 'here' to one exact storyboard item. Never set both. Also: rename, still-image motion (clip), add (clip) or change (animation) motion graphics. Approved storyboards cannot switch plans. Follow it with huasheng_wait_for_project.","inputs":[{"name":"animation","type":"integer","required":false,"description":"Optional animation id from huasheng_list_clips; cannot be combined with clip"},{"name":"attachments","type":"array","required":false,"description":"Materials to hand Huasheng with the request, up to 8: ids from huasheng_list_materials, or file paths / public URLs (added to the library first, analysed and billed like huasheng_manage_materials). A…"},{"name":"clip","type":"integer","required":false,"description":"Optional 1-based clip position from huasheng_list_clips; cannot be combined with animation"},{"name":"pid","type":"integer","required":true,"description":"The 15-digit video id; no default."},{"name":"request","type":"string","required":true,"description":"What to change, in the user's own words"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":327},{"name":"huasheng_edit_clip","title":"Edit the storyboard","description":"Edit storyboard clips using 1-based numbers from huasheng_list_clips. applied=false is not a failure: track action.operation.id with huasheng_wait_for_action. For redub, follow next_call to apply the existing recording; never restart generation. Undo via huasheng_list_project_versions.","inputs":[{"name":"action","type":"string","required":true,"description":"The reversible storyboard operation to perform"},{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"clip","type":"integer","required":false,"description":"The main clip, counting from 1. Omit for add; use target for insertion"},{"name":"expected_revision","type":"integer","required":false,"description":"Reject if the clip has changed since this revision."},{"name":"operation_id","type":"string","required":false,"description":"For redub only: continue the existing recording, without generating it again. Omit clip, text and expected_revision."},{"name":"pid","type":"integer","required":true,"description":"The 15-digit video id; no default."},{"name":"target","type":"object","required":false,"description":"For add: {before: n} or {after: n}; for split: {line: n}; for merge: {into: n}; for edit: {readings: [{text, say}]} sets how specific words are read (pinyin or homophones, at most 3x the word's lengt…"},{"name":"text","type":"string","required":false,"description":"Narration for edit/add, or optional pronunciation text for redub. For edit it may be omitted when only target.readings change"},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":342},{"name":"huasheng_get_style","title":"View the video title, look, and sound","description":"Shows the project title and presentation settings: aspect ratio, narrator voice, speaking pace, subtitles, background music and volume. Omit setting to list everything, or pass one setting to see its current value and accepted choices. Changes nothing. Use huasheng_set_style only after deciding a concrete new value.","inputs":[{"name":"pid","type":"integer","required":false,"description":"Video id (15 digits); default: this machine's current video."},{"name":"setting","type":"string","required":false,"description":"One setting to inspect. Omit to list all settings"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":110},{"name":"huasheng_set_style","title":"Change the video title, look, and sound","description":"Changes the project title and presentation: aspect ratio, narrator voice, speaking pace, subtitles and their size and colour, background music and volume. Both setting and value are required. If you need the current value or accepted choices, call huasheng_get_style first. Calling this twice with the same arguments is safe. **Exception — setting=voice after production has started re-records every clip, re-renders the video and spends credits (not refundable).** Call it with cost_only:true first to get the price, show it to the user, and only then change it; the result then has pending:true and the receipt carries action.operation.id for huasheng_wait_for_action.","inputs":[{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"cost_only","type":"boolean","required":false,"description":"Only for setting=voice: quote what the change would cost and change nothing. Free while production has not started; after that, credits per billed character"},{"name":"pid","type":"integer","required":true,"description":"The 15-digit video id; no default."},{"name":"preview","type":"boolean","required":false,"description":"setting=speed only: preview_url of one clip at that pace; no change"},{"name":"preview_clip","type":"integer","required":false,"description":"Clip (default 1)"},{"name":"setting","type":"string","required":true,"description":"Which setting to change"},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."},{"name":"value","type":"string","required":true,"description":"What to change it to"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":295},{"name":"huasheng_confirm_plan","title":"Approve the storyboard · spends credits, not refundable","description":"Approves the storyboard and starts production. **This spends credits and they are not refundable.** It covers both ways Huasheng asks for approval: PLAN_READY, and PAUSED where it asks as a question. Before calling it, inspect plan_requirements and cost_points from the latest project status. You may approve directly when that is a reasonable execution of the user's delegated goal. Otherwise show both in text and stop for the user. Never request a blind approval. The project may queue before production starts. First track the returned action.operation.id with huasheng_wait_for_action until the approval is authoritative, then use huasheng_wait_for_project for the next project decision.","inputs":[{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"pid","type":"integer","required":true,"description":"The 15-digit video id; no default."},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":196},{"name":"huasheng_export_video","title":"Export the finished video","description":"Exports the finished video and returns a download link; with save_to it also saves it to that path on this machine. Use it only when the current user request asks to deliver, download, export, or publish the video; READY only means exporting is possible and does not authorize it. **Exporting changes nothing and can be repeated safely.** It waits up to timeout_s (max 35), otherwise returns pending=true — not a failure: track action.operation.id with huasheng_wait_for_action; do not call this write again. save_to saves in the background (saving_to), tracked the same way. task_id resumes a known export; cancel=true stops it.","inputs":[{"name":"ai_mark","type":"boolean","required":false,"description":"Carry the small 'AI generated' mark; omit for the account default. Not the Huasheng watermark"},{"name":"cancel","type":"boolean","required":false,"description":"Stop the task_id export"},{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"pid","type":"integer","required":false,"description":"Video id (15 digits); default: this machine's current video."},{"name":"save_to","type":"string","required":false,"description":"Local path to save to, e.g. ./out.mp4; omit for a link only"},{"name":"task_id","type":"string","required":false,"description":"Existing export task to resume instead of exporting again"},{"name":"timeout_s","type":"integer","required":false,"description":"Seconds to wait, up to 35 (default)"},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":304},{"name":"huasheng_publish_video","title":"Publish to Bilibili · public and permanent","description":"Publishes the video to the user's own Bilibili channel. **It appears on their channel and enters review, and this cannot be undone.** Before calling it, use huasheng_export_video to get a link so the user can watch it, and confirm the title with them. Export not ready → published=false and task_id, nothing posted; call again with task_id. **Publishing is not idempotent** — do not retry on failure or timeout, because that can post it twice. Have the user check their uploads first. If Bilibili suggests no category, pass archive.tid.","inputs":[{"name":"ai_label","type":"boolean","required":false,"description":"Bilibili's AI-generated content label; omit to keep the project's setting"},{"name":"archive","type":"object","required":false,"description":null},{"name":"cover","type":"string","required":false,"description":"Thumbnail URL; default from the export"},{"name":"pid","type":"integer","required":true,"description":"The 15-digit video id; no default."},{"name":"tags","type":"array","required":false,"description":"A few tags"},{"name":"task_id","type":"string","required":false,"description":"From a previous call; skips re-exporting"},{"name":"title","type":"string","required":true,"description":"The title to publish under"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":232},{"name":"huasheng_list_projects","title":"Find Huasheng videos","description":"Lists Huasheng videos, newest first; with query, searches every project by title or script. has_more=true: pass next_cursor back only if the user asked for the complete list. Use it to find another video the user names or describes, instead of asking for a pid; never to guess the current video (omit pid for that). Read-only; rename with huasheng_set_style setting=name.","inputs":[{"name":"cursor","type":"string","required":false,"description":"next_cursor from the previous call; it already carries query and since_days"},{"name":"limit","type":"integer","required":false,"description":"How many videos to return, up to 50; default 20"},{"name":"query","type":"string","required":false,"description":"Optional title or script text to search across every project"},{"name":"since_days","type":"integer","required":false,"description":"Only videos created in the last N days; pass only when the user asked for a time range"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":179},{"name":"huasheng_delete_project","title":"Permanently delete a Huasheng video","description":"Permanently deletes one Huasheng video. It disappears from the user's project list, cannot be restored through the public product, and credits already spent are not refunded. Use huasheng_get_project first, name the exact video to the user, and let the host ask for confirmation before calling this tool.","inputs":[{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"pid","type":"integer","required":true,"description":"The 15-digit id of the video to delete"},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":123},{"name":"huasheng_list_project_versions","title":"View editing history","description":"Lists the project's fine-grained checkpoints and saved s-version rounds. Changes nothing. Use huasheng_set_project_version to undo, redo, or restore one of the returned rounds. An s-version is the state just after its instruction. version: preview that round read-only.","inputs":[{"name":"pid","type":"integer","required":false,"description":"Video id (15 digits); default: this machine's current video."},{"name":"version","type":"integer","required":false,"description":"s-version to preview"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":98},{"name":"huasheng_set_project_version","title":"Undo, redo, or restore a project version","description":"Changes the project to another editing state. undo and redo move one fine-grained step; goto atomically restores a saved s-version returned by huasheng_list_project_versions. Every successful change returns the authoritative current version.","inputs":[{"name":"action","type":"string","required":true,"description":"Version change"},{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"pid","type":"integer","required":false,"description":"Video id (15 digits); default: this machine's current video."},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."},{"name":"version","type":"integer","required":false,"description":"Required s-version when action=goto"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":133},{"name":"huasheng_list_materials","title":"View the footage library","description":"Lists footage files and folders in the user's Huasheng library. Changes nothing. Pass folder_id to open one folder; omit it for the top level. Pass list=\"uploads\" for a different set: files the user sent while editing a video, which Huasheng never read and therefore cannot pick on its own. huasheng_manage_materials action=add with one of their ids reads it into the library.","inputs":[{"name":"folder_id","type":"integer","required":false,"description":"Folder to list; omit for top level"},{"name":"list","type":"string","required":false,"description":"\"library\" (default) is footage Huasheng has read and can pick. \"uploads\" is what the user sent while editing — unread, and not in folders"},{"name":"sort","type":"string","required":false,"description":"Order by when added (default) or last changed, newest first"},{"name":"status","type":"string","required":false,"description":"Only files in this state; omit for all"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":189},{"name":"huasheng_manage_materials","title":"Add or organise footage","description":"Adds footage to the user's Huasheng library, or organises what is already there. add takes files on this machine, public URLs and ids alike. Huasheng reads a newly added video before it can pick it, which costs credits by the second; the result says how many. Images are free and usable at once. action=price answers \"how much would this cost\" without adding anything. Use huasheng_list_materials to inspect the library. Permanent deletion uses huasheng_delete_materials so the host can show the right warning.","inputs":[{"name":"action","type":"string","required":true,"description":"Library operation. price = what add would cost, without adding anything"},{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"folder_id","type":"integer","required":false,"description":"Folder to list, rename, or move into; 0 is top level"},{"name":"ids","type":"array","required":false,"description":"Material ids for move"},{"name":"material","type":"array","required":false,"description":"For add: what to add, each one a file on this machine, a public http(s) URL, or the id of something the user sent while editing (huasheng_list_materials with list=\"uploads\" shows those)"},{"name":"name","type":"string","required":false,"description":"File or folder name"},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."},{"name":"url","type":"string","required":false,"description":"Compatibility only. Use material for new calls — one public http(s) URL"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":297},{"name":"huasheng_delete_materials","title":"Permanently delete Huasheng footage","description":"Permanently deletes footage files or one folder from the Huasheng library. This cannot be undone. List the library first, name exactly what will be removed, and let the host ask the user for confirmation before calling this tool.","inputs":[{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"folder_id","type":"integer","required":false,"description":"Folder id when kind=folder"},{"name":"ids","type":"array","required":false,"description":"Material ids when kind=files"},{"name":"kind","type":"string","required":true,"description":"What to delete"},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":129},{"name":"huasheng_list_preferences","title":"View saved creative preferences","description":"Lists the user's reusable creative preferences, or returns one full preference when id is given. Changes nothing. Preferences affect projects started afterwards.","inputs":[{"name":"id","type":"integer","required":false,"description":"One preference id; omit to list all"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":52},{"name":"huasheng_save_preference","title":"Create or update a creative preference","description":"Creates a reusable creative preference when id is omitted, or updates that preference when id is given. Creating requires name and content. Editing changes only fields supplied. This does not rewrite a project already in progress.","inputs":[{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"content","type":"string","required":false,"description":"Preference instructions; required when creating"},{"name":"id","type":"integer","required":false,"description":"Preference id to update; omit to create"},{"name":"name","type":"string","required":false,"description":"Preference name; required when creating"},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":128},{"name":"huasheng_delete_preference","title":"Permanently delete a Huasheng preference","description":"Permanently deletes one saved creative preference. This cannot be undone. Read the preference first, name it to the user, and let the host ask for confirmation before calling this tool.","inputs":[{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"id","type":"integer","required":true,"description":"Saved preference id"},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":92},{"name":"huasheng_enable_fast_mode","title":"Enable priority processing · may spend credits and be irreversible","description":"Moves a project to priority processing. Before production is queued this is a reversible planning choice, even before a plan exists. Refresh the plan quote before confirmation. Priority may still queue; after it is queued, upgrading adds credits charged at execution and cannot be undone. The annotation therefore uses the riskier case. Call huasheng_get_project first and tell the user the current wait and fast_upgrade_cost_points before enabling it.","inputs":[{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"pid","type":"integer","required":true,"description":"The 15-digit video id; no default."},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":146},{"name":"huasheng_disable_fast_mode","title":"Use standard queue processing","description":"Turns off priority processing before the first production is confirmed, including before a plan exists. Refresh the plan quote before confirmation. It never refunds a completed paid upgrade and the service refuses disabling an irreversible queued upgrade. Calling this twice has the same result.","inputs":[{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"pid","type":"integer","required":false,"description":"Video id (15 digits); default: this machine's current video."},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":115},{"name":"huasheng_get_project","title":"Check on a video","description":"Checks project-level state: what Huasheng is doing, whether a question or approval is waiting, what it would cost, and whether an action is required to progress. Use it to answer status, progress, decision and price questions. It does not return the storyboard and does not open the editing workspace; use huasheng_list_clips for clip facts. It returns that project-level state in one call. Changes nothing.","inputs":[{"name":"detail","type":"string","required":false,"description":"concise (default) gives state and any required next action; full adds running detail and what the last run cost"},{"name":"pid","type":"integer","required":false,"description":"Video id (15 digits); default: this machine's current video."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":145},{"name":"huasheng_wait_for_action","title":"Track a change made in a Huasheng card","description":"Waits for one submitted MCP App action to reach an authoritative result. Pass operation.id from the action receipt. If phase remains PROCESSING, call again with the same operation_id. If next_call is present, perform that continuation instead; do not repeat the original write.","inputs":[{"name":"operation_id","type":"string","required":true,"description":"operation.id from an action receipt"},{"name":"timeout_s","type":"integer","required":false,"description":"Seconds, up to 35; default 30"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":98},{"name":"huasheng_wait_for_project","title":"Wait for project attention","description":"Blocks until the video reaches an attention or terminal state (a question is waiting / the storyboard needs approval / the video is ready / it failed), or until the time runs out. Use it after anything that sets Huasheng working. **timed_out=true is not a failure**, only \"not this time round\" — read eta_s to decide whether to call again or to tell the user roughly how long is left. If the state needs user input, show the question or the plan in text and stop; the state alone is not permission to answer for the user.","inputs":[{"name":"pid","type":"integer","required":false,"description":"Video id (15 digits); default: this machine's current video."},{"name":"timeout_s","type":"integer","required":false,"description":"Seconds to wait, up to 35 (default); then timed_out=true"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":170},{"name":"huasheng_control_run","title":"Cancel or re-queue Huasheng's run","description":"cancel stops the current run; spent credits are not refunded. retry only when the status has suggested_action=retry: it re-queues (no immediate start) and **uses one of today's slots**. Otherwise use huasheng_ask_agent. Call once, then huasheng_wait_for_project.","inputs":[{"name":"action","type":"string","required":true,"description":null},{"name":"pid","type":"integer","required":true,"description":"The 15-digit video id; no default."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":95},{"name":"huasheng_list_clips","title":"List the clips","description":"Reads every clip: 1-based position, narration, footage and health. Use before editing or to diagnose problems. clips_in_trouble lists broken clips; health, trouble and fix_by explain each. Follow the server's fix_by: swap_footage = inspect with huasheng_list_footage_candidates then apply with huasheng_replace_clip_footage; edit_text = reword; delete_clip = remove. Name affected clips and their fixes. Pass the 1-based number to huasheng_edit_clip. Never opens a card: explicit timeline viewing uses huasheng_preview_project; project state, decisions and price use huasheng_get_project. Changes nothing.","inputs":[{"name":"detail","type":"string","required":false,"description":"full (default) adds length, footage and opaque media references for the visual timeline; concise gives only positions and narration"},{"name":"pid","type":"integer","required":false,"description":"Video id (15 digits); default: this machine's current video."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":198},{"name":"huasheng_list_footage_candidates","title":"View alternative footage for one clip","description":"Inspects replacement footage for one clip without changing it or opening a card. Inspect the numbered images: the only way to know what the footage shows. For user selection use huasheng_choose_footage. Apply the chosen candidate's exact choice with huasheng_replace_clip_footage. Judge in order: (1) what this clip's narration is talking about; (2) Is the footage itself good (sharpness, composition, watermark/captions, stock-photo appearance); (3) does it sit well beside the neighbouring clips. Neighbours are context, not choices. Length is not a quality signal: playback_rate above 1 means trimming at normal speed; below 1 slows footage to fit narration. Mention visible slow motion below about 0.6; never reject on rate alone. used_by_clip indicates repetition: prefer unused footage, but reuse is allowed. If none fits, try from=\"similar\". Clips are numbered from 1; huasheng_list_clips shows them.","inputs":[{"name":"captions","type":"boolean","required":false,"description":"Also fetch what each piece of footage shows (caption and recognised brands / place / era); one extra request"},{"name":"clip","type":"integer","required":true,"description":"Which clip, counting from 1"},{"name":"from","type":"string","required":false,"description":"Where to look. agent (default) is the set Huasheng originally found; similar widens the search around the footage in use"},{"name":"pid","type":"integer","required":false,"description":"Video id (15 digits); default: this machine's current video."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":312},{"name":"huasheng_replace_clip_footage","title":"Replace the footage on one clip","description":"Replace one clip's footage. Copy the candidate choice, never its changing list position; own files/URLs also work. For pending receipts, track operation.id with huasheng_wait_for_action; do not repeat the write.","inputs":[{"name":"apply_from","type":"string","required":false,"description":"With numeric choice: ai restores this clip's ai_video.id; material selects ordinary local footage."},{"name":"choice","type":"string","required":true,"description":"Exact candidate choice; local .mp4/.mov/.jpg/.png path; public URL (free upload); or local-material id with apply_from."},{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"clip","type":"integer","required":true,"description":"Which clip, counting from 1"},{"name":"expected_revision","type":"integer","required":false,"description":"Reject if the clip has changed since this revision."},{"name":"from","type":"string","required":false,"description":"The same candidate source used when listing, default agent"},{"name":"pid","type":"integer","required":false,"description":"Video id (15 digits); default: this machine's current video."},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."},{"name":"wait_s","type":"integer","required":false,"description":"Seconds to wait for the replacement to land, up to 30; default 0"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":248},{"name":"huasheng_set_animation_visibility","title":"Show, hide or delete a motion-graphics overlay","description":"Shows, hides or deletes one of the animated overlays (listed by huasheng_list_clips detail=\"full\"). Add or change one via huasheng_ask_agent. Hiding is reversible; remove=true deletes (a version restore undoes it) — only if asked or failed. To change what an animation says, ask Huasheng itself with huasheng_ask_agent. A successful show/hide response completes that request: do not inspect other animations or export the video unless the user also asked for it.","inputs":[{"name":"animation","type":"integer","required":true,"description":"Its id, from the animations list in huasheng_list_clips"},{"name":"client_action_id","type":"string","required":false,"description":"MCP App: reuse for the same click. Models omit."},{"name":"pid","type":"integer","required":false,"description":"Video id (15 digits); default: this machine's current video."},{"name":"remove","type":"boolean","required":false,"description":"Delete it"},{"name":"ui_lang","type":"string","required":false,"description":"MCP App language. Models omit."},{"name":"visible","type":"boolean","required":false,"description":"true shows it, false hides it"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":215}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T06:05:32.000Z","track":"package","endpoint":null,"declaredUrl":null,"truncated":false,"tls":null,"dnssec":null,"auth":null,"httpsRedirect":null,"transports":[],"provenance":{"outcome":"none","label":"No attestation","reason":null,"reasonLabel":null,"discovery":null,"discoveryLabel":null,"sourceRepo":null,"attestationSkipped":null,"attestationSkippedLabel":null},"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":{"nodes":4,"partial":false,"deprecated":null,"stale":null,"noRepo":null}},"mismatches":[],"changelog":{"trackingSince":"2026-09-04","recent":[{"id":"chg_01a1aa50-0239-7b2a-a7ec-b902d4709ac4","kind":"check.unverifiable","summary":"Security disclosure (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a1aa50-0239-7b2a-a7ec-b902d4709ac4"},{"id":"chg_01a1aa50-023c-74f4-ab37-cdcc388f2a19","kind":"score.total_changed","summary":"Trust score (83 → 82)","materiality":"functional","direction":"regression","scoreDelta":-1,"occurredOn":"2026-11-05","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a1aa50-023c-74f4-ab37-cdcc388f2a19"},{"id":"chg_01a1a53f-d388-7088-94bd-24feac871ec9","kind":"check.reverified","summary":"Malware scan (unverified → pass)","materiality":"security","direction":"improvement","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a1a53f-d388-7088-94bd-24feac871ec9"},{"id":"chg_01a1a53f-d38a-7247-b434-9a5000721d82","kind":"score.total_changed","summary":"Trust score (68 → 83)","materiality":"functional","direction":"improvement","scoreDelta":15,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a1a53f-d38a-7247-b434-9a5000721d82"},{"id":"chg_01a1a24a-a746-7f21-8f50-de5196691ed8","kind":"check.unverifiable","summary":"Malware scan (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a1a24a-a746-7f21-8f50-de5196691ed8"},{"id":"chg_01a1a24a-a748-7c85-b879-da21766bb4c0","kind":"check.measure","summary":"Schema quality (excellent → good)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a1a24a-a748-7c85-b879-da21766bb4c0"},{"id":"chg_01a1a24a-a74b-73a2-9a6d-b603ba2d95c3","kind":"package.version_changed","summary":"Package version (0.6.0 → 0.6.2)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a1a24a-a74b-73a2-9a6d-b603ba2d95c3"},{"id":"chg_01a1a24a-a74b-7940-a416-621d5811d607","kind":"score.total_changed","summary":"Trust score (83 → 68)","materiality":"functional","direction":"regression","scoreDelta":-15,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a1a24a-a74b-7940-a416-621d5811d607"},{"id":"chg_01a1a09f-cd39-7b08-b909-f24dab6df244","kind":"package.version_changed","summary":"Package version (0.6.0 → 0.6.1)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a1a09f-cd39-7b08-b909-f24dab6df244"},{"id":"chg_01a190a5-6e59-7278-b5c8-dba9640c7d5a","kind":"check.verdict","summary":"Stability (0.97 → pass)","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-31","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a190a5-6e59-7278-b5c8-dba9640c7d5a"},{"id":"chg_01a18b81-fcf3-712f-86e4-6f643465cc36","kind":"check.verdict","summary":"Stability (pass → 0.97)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-30","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a18b81-fcf3-712f-86e4-6f643465cc36"},{"id":"chg_01a16c99-1b0e-7500-9182-58a21bef1ee2","kind":"check.verdict","summary":"Stability (0.97 → pass)","materiality":"security","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-24","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a16c99-1b0e-7500-9182-58a21bef1ee2"},{"id":"chg_01a1676f-ce1f-7aa1-a6de-f18be64a021f","kind":"check.verdict","summary":"Stability (pass → 0.97)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-23","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a1676f-ce1f-7aa1-a6de-f18be64a021f"},{"id":"chg_01a15d23-a1a5-75b1-854f-4a2f775db3c6","kind":"check.reverified","summary":"Malware scan (unverified → pass)","materiality":"security","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-21","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a15d23-a1a5-75b1-854f-4a2f775db3c6"},{"id":"chg_01a15d23-a1a6-70e9-b764-2c55b5bd5c4d","kind":"check.reverified","summary":"Known CVEs (unverified → pass)","materiality":"security","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-21","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a15d23-a1a6-70e9-b764-2c55b5bd5c4d"},{"id":"chg_01a15d23-a1a6-763b-a3ff-225a46f9f07c","kind":"check.reverified","summary":"Dependency health (unverified → 1.00)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-21","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a15d23-a1a6-763b-a3ff-225a46f9f07c"},{"id":"chg_01a15d23-a1a6-7b58-9995-6f26c13eb59b","kind":"score.total_changed","summary":"Trust score (57 → 83)","materiality":"functional","direction":"improvement","scoreDelta":26,"occurredOn":"2026-10-21","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a15d23-a1a6-7b58-9995-6f26c13eb59b"},{"id":"chg_01a158b0-5829-7cab-8563-ead3b35267ee","kind":"check.unverifiable","summary":"Malware scan (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-20","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a158b0-5829-7cab-8563-ead3b35267ee"},{"id":"chg_01a158b0-582b-735b-b63e-3edee42b1d85","kind":"check.unverifiable","summary":"Known CVEs (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-20","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a158b0-582b-735b-b63e-3edee42b1d85"},{"id":"chg_01a158b0-582b-7a0e-b2bc-b8e2b20acb68","kind":"check.unverifiable","summary":"Dependency health (1.00 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-20","url":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs#chg-chg_01a158b0-582b-7a0e-b2bc-b8e2b20acb68"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs/changelog.json"},"links":{"html":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs","markdown":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs.md","changelogJson":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs/changelog.json","changelogRss":"https://verifymcp.io/servers/superlcr-bilibili-huasheng-video/superlcr-hs.xml","external":[{"label":"npm package","href":"https://www.npmjs.com/package/@superlcr/hs"},{"label":"Socket report","href":"https://socket.dev/npm/package/@superlcr/hs"},{"label":"Repository","href":"https://github.com/superlcr/huasheng-cli"}]}}