Skip to main content
Glama
lesir831

Bilibili Video Info MCP

by lesir831

get_subtitles

Extract subtitles from Bilibili videos to access timed text content in multiple languages for analysis or translation.

Instructions

Get subtitles from a Bilibili video

Args: url: Bilibili video URL, e.g., https://www.bilibili.com/video/BV1x341177NN Returns: List of subtitles grouped by language. Each entry contains subtitle content with timestamps.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlYes

Implementation Reference

  • Primary MCP tool handler for 'get_subtitles'. Parses Bilibili video URL, extracts BV id, retrieves video basic info (aid/cid), calls helper to fetch subtitles, handles errors and returns formatted list.
    async def get_subtitles(url: str) -> list: """Get subtitles from a Bilibili video Args: url: Bilibili video URL, e.g., https://www.bilibili.com/video/BV1x341177NN Returns: List of subtitles grouped by language. Each entry contains subtitle content with timestamps. """ bvid = bilibili_api.extract_bvid(url) if not bvid: return [f"错误: 无法从 URL 提取 BV 号: {url}"] aid, cid, error = bilibili_api.get_video_basic_info(bvid) if error: return [f"获取视频信息失败: {error['error']}"] subtitles, error = bilibili_api.get_subtitles(aid, cid) if error: return [f"获取字幕失败: {error['error']}"] if not subtitles: return ["该视频没有字幕"] return subtitles
  • Registers the get_subtitles function as an MCP tool with metadata annotations including title and hints.
    @mcp.tool( annotations={ "title": "获取视频字幕", "readOnlyHint": True, "openWorldHint": False } )
  • Function signature defining input (url: str) and output (list) schema for the tool.
    async def get_subtitles(url: str) -> list:
  • Supporting helper function that queries Bilibili subtitle API, fetches subtitle metadata, downloads individual subtitle files, extracts content, and groups by language.
    def get_subtitles(aid, cid): """Fetches subtitles for a given aid and cid.""" headers = _get_headers() subtitles = [] try: params_subtitle = {'aid': aid, 'cid': cid} response_subtitle = requests.get(API_GET_SUBTITLE, params=params_subtitle, headers=headers) response_subtitle.raise_for_status() subtitle_data = response_subtitle.json() if subtitle_data.get('code') == 0 and subtitle_data.get('data', {}).get('subtitle', {}).get('subtitles'): for sub_meta in subtitle_data['data']['subtitle']['subtitles']: if sub_meta.get('subtitle_url'): try: subtitle_json_url = f"https:{sub_meta['subtitle_url']}" response_sub_content = requests.get(subtitle_json_url, headers=headers) response_sub_content.raise_for_status() sub_content = response_sub_content.json() subtitle_body = sub_content.get('body', []) content_list = [item.get('content', '') for item in subtitle_body] subtitles.append({ 'lan': sub_meta['lan'], 'content': content_list }) except requests.RequestException as e: print(f"Could not fetch or parse subtitle content from {sub_meta.get('subtitle_url')}: {e}") return subtitles, None except requests.RequestException as e: return [], {'error': f'Could not fetch subtitles: {e}'}

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lesir831/bilibili-video-info-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server