Skip to main content
Glama
allvoicelab

All Voice Lab MCP Server

Official
by allvoicelab

get_removal_info

Check the status and retrieve details of a subtitle removal task, including progress stage and result URL when available.

Instructions

[AllVoiceLab Tool] Retrieve status and details of a subtitle removal task.

This tool queries the current status of a previously submitted subtitle removal task and returns detailed information
about its progress, including the current processing stage, completion status, and result URL if available.

Args:
    project_id: The unique identifier of the subtitle removal task to check. This ID is returned from the remove_subtitle tool. Required.
    
Returns:
    TextContent containing the status (e.g., "pending", "processing", "success", "failed") and other details of the subtitle removal task,
    including the URL to the processed video if the task has completed successfully.
    
Limitations:
    - The project_id must be valid and properly formatted
    - The task must have been previously submitted to the AllVoiceLab API

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_idYes

Implementation Reference

  • The handler function that executes the get_removal_info tool. It validates the project_id, fetches the removal information using the AllVoiceLab client, formats the response details into a text message, and returns it as TextContent.
    def get_removal_info(project_id: str) -> TextContent:
        """
        Retrieve status and details of a subtitle removal task
        
        Args:
            project_id: The unique identifier of the subtitle removal task to check. This ID is returned from the remove_subtitle tool. Required.
            
        Returns:
            TextContent: Text content containing the status (e.g., "pending", "processing", "success", "failed") and other details of the subtitle removal task,
            including the URL to the processed video if the task has completed successfully.
        """
        all_voice_lab = get_client()
        logging.info(f"Tool called: get_removal_info")
        logging.info(f"Project ID: {project_id}")
    
        # Validate parameters
        if not project_id:
            logging.warning("Project ID parameter is empty")
            return TextContent(
                type="text",
                text="project_id parameter cannot be empty"
            )
    
        try:
            logging.info("Getting subtitle removal task information")
            removal_info = all_voice_lab.get_removal_info(project_id)
            logging.info(f"Subtitle removal info retrieved successfully for ID: {project_id}")
    
            # Format the result
            buffer = []
            buffer.append(f"Project ID: {removal_info.project_id}\n")
            buffer.append(f"Status: {removal_info.status}\n")
    
            if removal_info.name:
                buffer.append(f"Project Name: {removal_info.name}\n")
    
            if removal_info.output_url and removal_info.status == "done":
                buffer.append(f"Output URL: {removal_info.output_url}\n")
                buffer.append(
                    f"The subtitle removal task has been completed. You can download the processed video from the output URL.\n")
            else:
                buffer.append(
                    f"The subtitle removal task is still in progress. Please check again later using the project ID.\n")
    
            # Join the list into a string
            result = "".join(buffer)
            return TextContent(
                type="text",
                text=result
            )
        except Exception as e:
            logging.error(f"Failed to get subtitle removal information: {str(e)}")
            return TextContent(
                type="text",
                text=f"Failed to get subtitle removal information, tool temporarily unavailable"
            )
  • MCP tool registration for 'get_removal_info', specifying the name, detailed description including args and returns (serving as schema), and binding the handler function from dubbing.py.
    mcp.tool(
        name="get_removal_info",
        description="""[AllVoiceLab Tool] Retrieve status and details of a subtitle removal task.
        
        This tool queries the current status of a previously submitted subtitle removal task and returns detailed information
        about its progress, including the current processing stage, completion status, and result URL if available.
        
        Args:
            project_id: The unique identifier of the subtitle removal task to check. This ID is returned from the remove_subtitle tool. Required.
            
        Returns:
            TextContent containing the status (e.g., "pending", "processing", "success", "failed") and other details of the subtitle removal task,
            including the URL to the processed video if the task has completed successfully.
            
        Limitations:
            - The project_id must be valid and properly formatted
            - The task must have been previously submitted to the AllVoiceLab API
        """
    )(get_removal_info)
  • Underlying API client method called by the tool handler to fetch removal information from the AllVoiceLab API and parse it into a RemovalInfoResponse object.
    def get_removal_info(self, project_id: str) -> RemovalInfoResponse:
        """
        Query the result of subtitle removal
        
        Args:
            project_id: Subtitle removal project ID
            
        Returns:
            Subtitle removal project information response object
            
        Raises:
            Exception: When the request fails
        """
        # Create HTTP request
        url = f"{self.api_domain}/v1/videotrans/removal?project_id={project_id}"
    
        # Send request
        response = requests.get(url, headers=self._get_headers(), timeout=30)
        logging.info(f"get_removal_info response: {response.headers}")
        # Check status code
        if response.status_code != 200:
            logging.error(f"get_removal_info Request failed, status code: {response.status_code}")
            raise Exception(f"get_removal_info Request failed, status code: {response.status_code}")
    
        # Read response content
        response_data = response.text
        logging.info(response_data)
    
        # Parse JSON response
        json_data = json.loads(response_data)
        resp = RemovalInfoResponse.from_dict(json_data)
    
        return resp
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (queries status, returns progress details), what it returns (status, result URL), and limitations (requires valid project_id, task must be previously submitted). It doesn't mention rate limits, authentication needs, or error handling specifics, but provides solid operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns, Limitations) and front-loaded with the core purpose. Every sentence adds value, though the 'AllVoiceLab Tool' prefix could be considered slightly redundant given the context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter query tool with no annotations and no output schema, the description provides good completeness: purpose, usage context, parameter explanation, return format description, and limitations. It could potentially include more about error cases or response structure, but covers the essentials well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage for the single parameter, the description fully compensates by explaining: 'project_id: The unique identifier of the subtitle removal task to check. This ID is returned from the remove_subtitle tool. Required.' It provides meaning, source, and requirement status beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verb+resource: 'Retrieve status and details of a subtitle removal task.' It distinguishes from siblings by specifying it's for checking status of a removal task, not performing the removal itself (which is done by remove_subtitle).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'to check the current status of a previously submitted subtitle removal task.' It also specifies the prerequisite: 'The task must have been previously submitted to the AllVoiceLab API' and references the sibling tool: 'This ID is returned from the remove_subtitle tool.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

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/allvoicelab/AllVoiceLab-MCP'

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