Skip to main content
Glama
lesir831

Bilibili Video Info MCP

by lesir831

get_subtitles

Read-only

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}'}

Tool Definition Quality

Score is being calculated. Check back soon.

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