A MCP Server that extracts and formats video content into structured text, optimized for LLM processing and analysis.
Single tool 'bili_scribe' has moderate naming and basic schema definition, but lacks depth in parameter descriptions and error handling guidance. Tool name follows verb_noun pattern (acceptable), but parameter descriptions are minimal and do not explain constraints, expected formats, or recovery paths. Output is unstructured plaintext string, not typed schema. No error classification or recovery guidance. No input validation rules exposed. Risk categorization (READ_ONLY) is present but tool behavior lacks defensive design patterns.
Extracts and formats video content into structured text, optimized for LLM processing and analysis.
Parameter 'video_url' description is generic ('The URL of video to process') and lacks format constraints. Missing guidance on supported platforms (Bilibili, YouTube via yt-dlp), URL validation rules, or error recovery steps.
Parameter 'use_audio' description states 'Should always be True' but is marked optional with default true. This contradictory guidance will confuse LLMs about when to override the default. Code shows subtitle-only mode returns '[Error] 仅使用字幕功能尚未实现' (not implemented), but parameter description does not explain this constraint or that the feature is incomplete.
Output schema is unstructured string. Tool returns concatenated plaintext like 'metadata\n=== 内容转录 ===\nbody', forcing LLMs to parse freeform text. No documented output structure (video metadata object, transcript object, status codes). Violates pattern:response-shaper and mxe:strip-api-responses.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 42 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 34 | - | v1 |
Error handling is silent-fail with magic strings ('[Error] ...'). LLM cannot distinguish between transient network errors, invalid URL, unsupported platform, or missing API credentials. No recovery guidance (e.g., 'Invalid URL format; expected https://www.bilibili.com/video/BV... or YouTube URL'). Violates pattern:recovery-guide.
process.py contains AWS S3/R2 upload logic (boto3, upload_file_to_s3) but source code for upload_file_to_s3() and transcribe_audio() is truncated/incomplete. Cannot verify credential handling, rate limits, timeout handling, or error propagation. AWS keys could be exposed if passed via environment without server-side injection guards.
Tool accepts arbitrary URLs (video_url: str) with no validation. No URL scheme whitelist, no domain allowlist, no path traversal checks. LLM could be tricked into passing malicious URLs. Input validation missing; LLM cannot self-correct invalid URLs without explicit error feedback.
No pagination, rate limiting, or result size limits documented. Video transcript + metadata returned as single string; very long videos could produce multi-megabyte responses, exhausting context windows. Tool description does not mention expected output length or recommended use cases (short-form vs long-form video).
Tool modifies state implicitly (downloads audio to temp dir, uploads to S3) but neither the description nor schema documents this. LLM unaware that the call incurs S3 storage costs, network latency, or that intermediate files exist. Violates pattern:command-tool (destructive operations must be documented).