@writepanda/mcp
npm
v1.122.0
Published by @writepanda — no publish provenance, so origin is unverified, but the source is public: the repository link below is self-declared yet readable, so you can inspect the code before adopting it.
Model Context Protocol server for PandaStudio. Exposes the desktop video editor's automation surface to Cursor, Continue, Cline, Claude Desktop, and any MCP-compliant client.
The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.
1. Threat score — 100 − 0 = 100. What the published surface and source actually contain:
The deterministic scan raised no scored threat in the surface it inspected — the threat score stayed at 100. Capability observations and advisory notes are recorded but never lower it.
2. Client adoption risk — 100 − 7 = 93. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:
| Points | Adoption-risk factor |
|---|---|
| −6 | capability blast radius (high) — client exposure if the model is manipulated |
| −1 | publisher verification (public source) — no provenance, but the source is public and inspectable |
Capability observations and info notes are shown under Findings but never scored.
Open any row's finding below for the file, line and evidence behind a deduction.
Tool "media_generate_avatar_video" appears to run shell commands or evaluate code (parameter "script"). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool media_generate_avatar_video
Tool "pandastudio_call" appears to run shell commands or evaluate code (parameter "command"). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.
Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.
Location: tool pandastudio_call
In the server's implementation (`bin/server.mjs:30`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.
Evidence: rt { spawn } from "node:child_process"; import fs from "node:fs/promises"; import os from "node:os"; import path from "n
Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.
Location: server bin/server.mjs
Untrusted-input tools ([system_set_transcription_language, system_is_whisper_model_downloaded, system_set_narration_engine, system_is_kokoro_model_downloaded, system_download_kokoro_model, project_set_clip_lut]) co-exist with external-action tools ([media_generate_avatar_video, preview_seek, pandastudio_call]). A prompt injection could cause unwanted external actions, though no direct sensitive-data leak path was found.
Evidence: untrusted [system_set_transcription_language, system_is_whisper_model_downloaded, system_set_narration_engine, system_is_kokoro_model_downloaded, system_downloa
Fix: Require confirmation for state-changing/egress actions triggered after processing untrusted content.
Location: flow system_set_transcription_language → media_generate_avatar_video
Tool "media_generate_avatar_video" takes a command-shaped parameter "script" with no enum/pattern constraint. Free-form, model- or attacker-controlled arguments reaching a shell is the command-injection precondition.
Fix: Constrain the parameter (enum/pattern), or build the command from a fixed template with escaped args.
Location: tool media_generate_avatar_video · inputSchema.properties.script
Tool "pandastudio_call" takes a command-shaped parameter "command" with no enum/pattern constraint. Free-form, model- or attacker-controlled arguments reaching a shell is the command-injection precondition.
Fix: Constrain the parameter (enum/pattern), or build the command from a fixed template with escaped args.
Location: tool pandastudio_call · inputSchema.properties.command
Tool "media_generate_avatar_video" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool media_generate_avatar_video
Tool "pandastudio_call" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.
Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.
Location: tool pandastudio_call
Each tool and what it can reach — statically extracted from the published source.
media_generate_avatar_videoruns code / shellpandastudio_callruns code / shellpreview_seeknetwork egressproject_set_clip_lutingests untrusted inputsystem_download_kokoro_modelingests untrusted inputsystem_is_kokoro_model_downloadedingests untrusted inputsystem_is_whisper_model_downloadedingests untrusted inputsystem_set_narration_engineingests untrusted inputsystem_set_transcription_languageingests untrusted inputagent_session_listno sensitive capabilityagent_session_stopno sensitive capabilityasset_list_fxno sensitive capabilityasset_list_lutsno sensitive capabilityasset_list_musicno sensitive capabilityasset_list_soundsno sensitive capabilityasset_list_transitionsno sensitive capabilityaudio_cleanno sensitive capabilityaudio_probeno sensitive capabilitycaption_set_styleno sensitive capabilitycaption_set_templateno sensitive capabilitycaption_toggleno sensitive capabilityexport_clear_thumbnailno sensitive capabilityexport_edit_thumbnailno sensitive capabilityexport_generate_thumbnailno sensitive capabilityexport_listno sensitive capabilityexport_list_youtubeno sensitive capabilityexport_publish_instagramno sensitive capabilityexport_publish_youtubeno sensitive capabilityexport_revert_thumbnailno sensitive capabilityexport_set_detailsno sensitive capabilityexport_set_thumbnailno sensitive capabilityexport_startno sensitive capabilityexport_update_youtubeno sensitive capabilityexport_update_youtube_thumbnailno sensitive capabilityinstagram_accountno sensitive capabilityinstagram_connectno sensitive capabilityinstagram_disconnectno sensitive capabilityinstagram_statusno sensitive capabilityjob_cancelno sensitive capabilityjob_getno sensitive capabilityjob_waitno sensitive capabilityllm_generate_captionno sensitive capabilityllm_generate_descriptionno sensitive capabilityllm_generate_timestampsno sensitive capabilityllm_generate_titleno sensitive capabilitymedia_generate_imageno sensitive capabilitymedia_generate_musicno sensitive capabilitymedia_generate_narrationno sensitive capabilitymedia_image_to_videono sensitive capabilitymedia_list_avatar_voicesno sensitive capabilitymedia_list_avatarsno sensitive capabilitymemory_forgetno sensitive capabilitymemory_listno sensitive capabilitymemory_saveno sensitive capabilitymotion_concatno sensitive capabilitymotion_generateno sensitive capabilitymotion_generate_storyboardno sensitive capabilitymotion_listno sensitive capabilitymotion_list_storyboardsno sensitive capabilitymotion_render_htmlno sensitive capabilitymotion_screenshotno sensitive capabilitymotion_verify_framesno sensitive capabilitypreview_hideno sensitive capabilitypreview_showno sensitive capabilityproject_add_annotationno sensitive capabilityproject_add_audiono sensitive capabilityproject_add_background_effectno sensitive capabilityproject_add_caption_regionno sensitive capabilityproject_add_clipno sensitive capabilityproject_add_clip_transform_regionno sensitive capabilityproject_add_designed_segmentno sensitive capabilityproject_add_fxno sensitive capabilityproject_add_lower_thirdno sensitive capabilityproject_add_motion_graphicno sensitive capabilityproject_add_mute_regionno sensitive capabilityproject_add_podcast_clipno sensitive capabilityproject_add_speedno sensitive capabilityproject_add_spotlightno sensitive capabilityproject_add_transitionno sensitive capabilityproject_add_trimno sensitive capabilityproject_add_zoomno sensitive capabilityproject_apply_edit_planno sensitive capabilityproject_auto_reframeno sensitive capabilityproject_auto_sync_podcastno sensitive capabilityproject_clear_editsno sensitive capabilityproject_currentno sensitive capabilityproject_deleteno sensitive capabilityproject_duplicateno sensitive capabilityproject_fork_from_shotno sensitive capabilityproject_listno sensitive capabilityproject_locateno sensitive capabilityproject_move_clipno sensitive capabilityproject_newno sensitive capabilityproject_openno sensitive capabilityproject_readno sensitive capabilityproject_remove_audiono sensitive capabilityproject_remove_caption_regionno sensitive capabilityproject_remove_clipno sensitive capabilityproject_remove_mute_regionno sensitive capabilityproject_remove_regionno sensitive capabilityproject_remove_spotlightno sensitive capabilityproject_renameno sensitive capabilityproject_render_frameno sensitive capabilityproject_render_sheetno sensitive capabilityproject_saveno sensitive capabilityproject_set_aspect_rationo sensitive capabilityproject_set_backdropno sensitive capabilityproject_set_clip_kindno sensitive capabilityproject_set_clip_layoutno sensitive capabilityproject_set_clip_styleno sensitive capabilityproject_set_clip_volumeno sensitive capabilityproject_set_cropno sensitive capabilityproject_set_export_settingsno sensitive capabilityproject_set_focal_pointno sensitive capabilityproject_set_folderno sensitive capabilityproject_set_overlay_backdrop_blurno sensitive capabilityproject_set_overlay_cropno sensitive capabilityproject_set_participant_offsetno sensitive capabilityproject_set_region_soundno sensitive capabilityproject_set_screen_transformno sensitive capabilityproject_set_shorts_layoutno sensitive capabilityproject_set_styleno sensitive capabilityproject_set_wallpaperno sensitive capabilityproject_set_webcam_layoutno sensitive capabilityproject_set_webcam_offsetno sensitive capabilityproject_set_webcam_styleno sensitive capabilityproject_showno sensitive capabilityproject_split_clipno sensitive capabilityproject_update_regionno sensitive capabilityproject_update_spotlightno sensitive capabilitysystem_get_narration_engineno sensitive capabilitysystem_get_transcription_languageno sensitive capabilitysystem_list_commandsno sensitive capabilitysystem_statusno sensitive capabilitytimeline_source_to_editedno sensitive capabilitytranscript_delete_wordsno sensitive capabilitytranscript_find_issuesno sensitive capabilitytranscript_find_replaceno sensitive capabilitytranscript_getno sensitive capabilitytranscript_insert_wordsno sensitive capabilitytranscript_remove_fillersno sensitive capabilitytranscript_remove_silencesno sensitive capabilitytranscript_restore_wordsno sensitive capabilitytranscript_searchno sensitive capabilitytranscript_transcribeno sensitive capabilityworkspace_capture_brandno sensitive capabilityworkspace_contentsno sensitive capabilityworkspace_createno sensitive capabilityworkspace_currentno sensitive capabilityworkspace_deleteno sensitive capabilityworkspace_get_brandno sensitive capabilityworkspace_get_project_defaultsno sensitive capabilityworkspace_listno sensitive capabilityworkspace_renameno sensitive capabilityworkspace_set_brandno sensitive capabilityworkspace_set_project_defaultsno sensitive capabilityworkspace_switchno sensitive capabilityyoutube_connectno sensitive capabilityyoutube_disconnectno sensitive capabilityyoutube_is_configuredno sensitive capabilityyoutube_list_accountsno sensitive capabilityyoutube_list_channelsno sensitive capabilityCross-tool combinations that form a data-exfiltration primitive (untrusted input → sensitive source → external sink).
Scan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.
| Version | Score | Findings | Engine | Scanned |
|---|---|---|---|---|
v1.122.0 latest |
A 93/100 | 8 | 1.13.0 | 2026-09-08 |
v1.119.0 |
A 93/100 | 8 | 1.12.1 | 2026-08-14 |
v1.116.1 |
A 93/100 | 5 | 1.12.1 | 2026-08-04 |
v1.116.0 |
A 93/100 | 5 | 1.8.0 | 2026-07-23 |
Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.
The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.
npx mcptrustchecker scan @writepanda/mcp --online
Turn designs into shipped parts: quote 3D printing, CNC, and decals, then check out.
Aleph's official SiliconFlow media-generation MCP server (image / video / TTS)
MCP server for image generation using Google Gemini AI
Ambience AI MCP Server - Generate images, videos, and audio through Model Context Protocol
MCP server exposing every endpoint of the AstroWay Calculation API as tools — natal, synastry, transits, Vedic dashas, Tarot, Numerology, Human Design, AI horoscopes — for Claude Desktop, Cursor and any MCP-compatible AI agent.
Audio-guide and trip-planning tools for 1,100+ cities from Audiala. Free, no API key.