An MCP (Model Context Protocol) server that allows you to fetch subtitles for Bilibili videos.
This server implements 4 tools for Bilibili subtitle extraction and video search. Naming is generally clear and verb-based (fetch_subtitles, search_videos, get_video_info, fetch_subtitles_with_asr). All tools have descriptions present and reasonable length (50-150 chars). However, schema quality is mixed: while input parameters are defined with types and descriptions, output schemas are NOT documented in the visible code, LLMs cannot plan downstream calls or extract structured data reliably. Error handling exists at the code level but is not visible in tool definitions. The fetch_subtitles_with_asr tool combines multiple concerns (fetch + fallback to ASR) which could be decomposed. Parameter descriptions are present but some lack detail on constraints (e.g., asr_model_size lacks validation guidance). CRITICAL: the fetch_subtitles and fetch_subtitles_with_asr tools both accept url OR bvid parameters, creating mutual exclusivity that is handled in code but not declared in schemas, LLMs will pass both. No tool annotations (readonly, destructive hints) are present despite fastmcp support.
Fetch subtitles for a Bilibili video by URL or BVID
Fetch subtitles for a Bilibili video, falling back to audio transcription if no subtitle track exists
Get detailed information about a Bilibili video
Search for videos on Bilibili
Output schemas not documented. Tools return results but LLM cannot predict structure, field names, or types. Downstream tool chaining is impossible without trial and error. Violates pattern:response-shaper and mxe:include-chaining-ids.
Mutually exclusive parameters (url vs bvid) on fetch_subtitles and fetch_subtitles_with_asr are validated in code but NOT declared in schema. LLMs will pass both parameters, causing runtime errors. Code logic rejects both/neither but schema doesn't warn LLM.
fetch_subtitles_with_asr combines two distinct concerns: subtitle fetching + audio transcription with fallback. This violates pattern:tool (one action per tool). Should be decomposed into separate fetch_subtitles + transcribe_audio tools, allowing agents to compose them independently.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 45 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 22 | - | v1 |
asr_model_size parameter lacks validation guidance. Description states 'Whisper model size for ASR (tiny, base, small, medium, large)' but does not indicate this is an enum, should be declared as enum constraint in schema.
No tool annotations present. fastmcp supports readOnlyHint, destructiveHint, and idempotentHint. All four tools are read-only and should be annotated as such, enabling agents to make better safety decisions. This is a current spec feature (2026-07-28).
search_videos accepts 'page' parameter (integer) but no constraints on valid range are documented. Should specify min=1, max=100 or appropriate limits to prevent agents passing absurd values.
preferred_lang parameter descriptions mention default values ('default: zh-CN or BILIBILI_PREFERRED_LANG env var') but do not specify what values are valid. Should enumerate common language codes (zh-CN, zh-TW, en-US, etc.) or reference Bilibili's supported language list.