Skip to main content
Glama
cfrs2005

GS Robot MCP Server

by cfrs2005

execute_s_line_no_site_task_workflow

Automates S-line robot task workflows by mapping, selecting subareas, building tasks, and submitting them using robot serial numbers and parameters.

Instructions

Executes complete S-line robot task workflow without site information.

Automated process: Map list → Map selection → Subarea retrieval → Task building → Task submission

Args:
    robot_sn: The serial number of the target robot.
    task_parameters: Task parameters including map criteria and task settings.

Returns:
    A dictionary containing the workflow execution result.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
robot_snYes
task_parametersYes

Implementation Reference

  • MCP tool registration using @mcp.tool() decorator. This is the entry point for the tool invocation, delegating to GausiumMCP instance.
    @mcp.tool()
    async def execute_s_line_no_site_task_workflow(
        robot_sn: str,
        task_parameters: dict
    ):
        """Executes complete S-line robot task workflow without site information.
        
        Automated process: Map list → Map selection → Subarea retrieval → Task building → Task submission
    
        Args:
            robot_sn: The serial number of the target robot.
            task_parameters: Task parameters including map criteria and task settings.
    
        Returns:
            A dictionary containing the workflow execution result.
        """
        return await mcp.execute_s_line_no_site_task_workflow(
            robot_sn=robot_sn,
            task_parameters=task_parameters
        )
  • GausiumMCP class method that wraps and delegates the workflow execution to TaskExecutionEngine.
    async def execute_s_line_no_site_task_workflow(
        self,
        robot_sn: str,
        task_parameters: Dict[str, Any]
    ) -> Dict[str, Any]:
        """
        执行S线无站点任务完整工作流。
        
        自动化流程:地图列表 → 地图选择 → 分区获取 → 任务构建 → 任务下发
        
        Args:
            robot_sn: 机器人序列号
            task_parameters: 任务参数
            
        Returns:
            工作流执行结果
        """
        return await self.task_engine.execute_s_line_no_site_task(
            robot_sn=robot_sn,
            task_parameters=task_parameters
        )
  • Core handler implementing the S-line no-site task workflow: fetches robot maps, selects map, retrieves subareas, builds task data, and submits temporary no-site task via API.
    async def execute_s_line_no_site_task(
        self,
        robot_sn: str,
        task_parameters: Dict[str, Any]
    ) -> Dict[str, Any]:
        """
        执行S线无站点任务。
        
        工作流:
        1. 获取机器人地图列表
        2. 获取目标地图分区
        3. 构建并下发无站点临时任务
        
        Args:
            robot_sn: 机器人序列号
            task_parameters: 任务参数
            
        Returns:
            任务执行结果
        """
        logger.info(f"Starting S-line no-site task execution for robot: {robot_sn}")
        
        async with GausiumAPIClient() as client:
            try:
                # 1. 获取机器人地图列表
                maps_response = await client.call_endpoint(
                    'list_maps',
                    json_data={'robotSn': robot_sn}
                )
                
                # 处理Gausium特殊响应格式
                if maps_response.get('code') != 0:
                    raise RuntimeError(f"Failed to get maps: {maps_response.get('msg')}")
                
                available_maps = maps_response.get('data', [])
                if not available_maps:
                    raise ValueError("No maps found for robot")
                
                # 2. 选择目标地图
                target_map_id = self._select_map_from_list(
                    available_maps,
                    task_parameters.get('map_criteria', {})
                )
                
                # 3. 获取地图分区
                subareas = await client.call_endpoint(
                    'get_map_subareas',
                    path_params={'map_id': target_map_id}
                )
                
                # 4. 构建任务数据
                task_data = self._build_no_site_task_data(
                    target_map_id,
                    subareas,
                    task_parameters
                )
                
                # 5. 下发无站点临时任务
                task_result = await client.call_endpoint(
                    'submit_temp_no_site_task',
                    json_data=task_data
                )
                
                logger.info(f"S-line no-site task executed successfully: {task_result}")
                return task_result
                
            except Exception as e:
                logger.error(f"S-line no-site task execution failed: {str(e)}")
                raise
  • Helper function to construct the task data dictionary for submitting no-site temporary tasks.
    def _build_no_site_task_data(
        self,
        map_id: str,
        subareas: Dict[str, Any],
        task_parameters: Dict[str, Any]
    ) -> Dict[str, Any]:
        """
        构建无站点任务数据。
        
        Args:
            map_id: 地图ID
            subareas: 地图分区信息
            task_parameters: 任务参数
            
        Returns:
            任务数据
        """
        # TODO: 根据实际API要求构建任务数据
        task_data = {
            "mapId": map_id,
            "subareas": subareas,
            "taskType": task_parameters.get('task_type', 'cleaning'),
            "cleaningMode": task_parameters.get('cleaning_mode', '__middle_cleaning'),
            **task_parameters
        }
        
        return task_data
  • Helper function to select the target map from the robot's available maps based on criteria.
    def _select_map_from_list(
        self,
        available_maps: List[Dict[str, Any]],
        criteria: Dict[str, Any]
    ) -> str:
        """
        从地图列表中选择目标地图。
        
        Args:
            available_maps: 可用地图列表  
            criteria: 选择条件
            
        Returns:
            选中的地图ID
        """
        if not criteria:
            return available_maps[0]['mapId']
        
        # TODO: 实现地图选择逻辑
        for map_info in available_maps:
            if self._matches_criteria(map_info, criteria):
                return map_info['mapId']
        
        return available_maps[0]['mapId']

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/cfrs2005/mcp-gs-robot'

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