Skip to main content
Glama
lesir831

Bilibili Video Info MCP

by lesir831

get_subtitles

Extract subtitles with timestamps from Bilibili videos. Input a video URL to receive organized subtitle content by language for accessibility and analysis.

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 implementation of the 'get_subtitles' MCP tool: async handler registered via @mcp.tool decorator, with input schema (url: str), docstring description, and logic to extract video info and fetch subtitles.
    @mcp.tool( annotations={ "title": "获取视频字幕", "readOnlyHint": True, "openWorldHint": False } ) 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
  • Helper function implementing the core API logic for fetching and parsing Bilibili subtitles using aid and cid parameters.
    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}'}
Install Server

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