Skip to main content
Glama
jikime

YouTube Toolbox

get_video_comments

Retrieve and analyze YouTube video comments to understand audience feedback and engagement. Specify video ID, result limits, sorting order, and reply inclusion for targeted insights.

Instructions

Get comments for a YouTube video

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
video_idYes
max_resultsNo
orderNorelevance
include_repliesNo
page_tokenNo

Implementation Reference

  • Primary MCP tool handler for get_video_comments. Processes parameters, calls YouTubeService.get_video_comments, formats top-level comments and optional replies into structured JSON response with pagination info.
    @mcp.tool(
        name="get_video_comments",
        description="Get comments for a YouTube video",
    )
    async def get_video_comments(
        video_id: str, 
        max_results: Optional[int] = 20, 
        order: Optional[str] = "relevance", 
        include_replies: bool = False,
        page_token: Optional[str] = None
    ) -> Dict[str, Any]:
        """
        Get comments for a YouTube video
        
        Args:
            video_id (str): YouTube video ID
            max_results (int): Maximum number of comments to return (default: 20)
            order (str): Order by 'relevance' (default) or 'time'
            include_replies (bool): Whether to include replies to comments
            page_token (str, optional): Token for paginated results
        
        Returns:
            Dict[str, Any]: Comments data
        """
        try:
            options = {
                'order': order,
                'includeReplies': include_replies,
            }
            
            if page_token:
                options['pageToken'] = page_token
                
            comments_data = youtube_service.get_video_comments(video_id, max_results, **options)
            
            # Format the response
            formatted_comments = []
            for item in comments_data.get('items', []):
                comment = item.get('snippet', {}).get('topLevelComment', {}).get('snippet', {})
                
                formatted_comment = {
                    'id': item.get('id'),
                    'text': comment.get('textDisplay'),
                    'author': comment.get('authorDisplayName'),
                    'authorProfileImageUrl': comment.get('authorProfileImageUrl'),
                    'likeCount': comment.get('likeCount'),
                    'publishedAt': comment.get('publishedAt'),
                    'updatedAt': comment.get('updatedAt'),
                    'replyCount': item.get('snippet', {}).get('totalReplyCount', 0)
                }
                
                # Include replies if requested and available
                if include_replies and 'replies' in item:
                    reply_comments = []
                    for reply in item.get('replies', {}).get('comments', []):
                        reply_snippet = reply.get('snippet', {})
                        reply_comments.append({
                            'id': reply.get('id'),
                            'text': reply_snippet.get('textDisplay'),
                            'author': reply_snippet.get('authorDisplayName'),
                            'authorProfileImageUrl': reply_snippet.get('authorProfileImageUrl'),
                            'likeCount': reply_snippet.get('likeCount'),
                            'publishedAt': reply_snippet.get('publishedAt'),
                            'updatedAt': reply_snippet.get('updatedAt')
                        })
                    
                    formatted_comment['replies'] = reply_comments
                    
                formatted_comments.append(formatted_comment)
                
            return {
                'comments': formatted_comments,
                'nextPageToken': comments_data.get('nextPageToken'),
                'totalResults': comments_data.get('pageInfo', {}).get('totalResults', 0)
            }
        except Exception as e:
            logger.exception(f"Error in get_video_comments: {e}")
            return {'error': str(e)}
  • Core helper method in YouTubeService class that constructs and executes the YouTube Data API v3 commentThreads.list request, handling URL parsing, parameters like order/pageToken/includeReplies, and error handling.
    def get_video_comments(self, video_id: str, max_results: int = 20, **options) -> Dict[str, Any]:
        """
        Get comments for a specific YouTube video
        """
        video_id = self.parse_url(video_id)
        
        try:
            params = {
                'part': 'snippet',
                'videoId': video_id,
                'maxResults': max_results
            }
            
            if 'order' in options:
                params['order'] = options['order']
                
            if 'pageToken' in options:
                params['pageToken'] = options['pageToken']
                
            if options.get('includeReplies'):
                params['part'] = 'snippet,replies'
                
            response = self.youtube.commentThreads().list(**params).execute()
            return response
        except HttpError as e:
            logger.error(f"Error getting comments: {e}")
            raise e
  • server.py:1053-1056 (registration)
    MCP tool registration decorator specifying the tool name and description.
    @mcp.tool(
        name="get_video_comments",
        description="Get comments for a YouTube video",
    )
  • Input schema inferred from function parameters: video_id (required str), max_results (opt int=20), order (opt str="relevance"), include_replies (opt bool=False), page_token (opt str). Output: Dict with comments list, nextPageToken, totalResults.
    async def get_video_comments(
        video_id: str, 
        max_results: Optional[int] = 20, 
        order: Optional[str] = "relevance", 
        include_replies: bool = False,
        page_token: Optional[str] = None
    ) -> Dict[str, Any]:

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/jikime/py-mcp-youtube-toolbox'

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