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