Skip to main content
Glama
sandraschi

Robotics MCP Server

robot_manufacturing

Control and monitor manufacturing equipment like 3D printers, CNC machines, and laser cutters. Manage operations, track status, and execute maintenance tasks.

Instructions

Control and monitor manufacturing equipment (3D printers, CNC, etc.).

This tool provides unified control over manufacturing devices including:

  • 3D printers (via OctoPrint, Moonraker, Repetier Server)

  • CNC machines

  • Laser cutters

Args: device_id: Unique identifier for the manufacturing device device_type: Type of manufacturing equipment category: Operation category (control, monitor, maintenance) action: Specific action to perform file_path: Path to file for printing/cutting temperature: Temperature settings (hotend, bed, chamber) speed: Speed/feed rate settings position: Position coordinates (X, Y, Z) gcode: Raw G-code commands to send monitor_type: What to monitor (status, temperature, progress, webcam) maintenance_action: Maintenance operation to perform

Returns: Operation result with status and data

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
device_idYes
device_typeYes
categoryYes
actionYes
file_pathNo
temperatureNo
speedNo
positionNo
gcodeNo
monitor_typeNo
maintenance_actionNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Core implementation of the robot_manufacturing tool handler. This async function, decorated with @self.mcp.tool(), handles control, monitoring, and maintenance for manufacturing devices like 3D printers, CNC machines, and laser cutters by dispatching to specific handlers.
    @self.mcp.tool()
    async def robot_manufacturing(
        device_id: str,
        device_type: Literal["3d_printer", "cnc_machine", "laser_cutter"],
        category: Literal["control", "monitor", "maintenance"],
        action: str,
        # Control parameters
        file_path: Optional[str] = None,
        temperature: Optional[Dict[str, float]] = None,
        speed: Optional[float] = None,
        position: Optional[Dict[str, float]] = None,
        gcode: Optional[str] = None,
        # Monitor parameters
        monitor_type: Optional[str] = None,
        # Maintenance parameters
        maintenance_action: Optional[str] = None,
    ) -> Dict[str, Any]:
        """Control and monitor manufacturing equipment (3D printers, CNC, etc.).
    
        This tool provides unified control over manufacturing devices including:
        - 3D printers (via OctoPrint, Moonraker, Repetier Server)
        - CNC machines
        - Laser cutters
    
        Args:
            device_id: Unique identifier for the manufacturing device
            device_type: Type of manufacturing equipment
            category: Operation category (control, monitor, maintenance)
            action: Specific action to perform
            file_path: Path to file for printing/cutting
            temperature: Temperature settings (hotend, bed, chamber)
            speed: Speed/feed rate settings
            position: Position coordinates (X, Y, Z)
            gcode: Raw G-code commands to send
            monitor_type: What to monitor (status, temperature, progress, webcam)
            maintenance_action: Maintenance operation to perform
    
        Returns:
            Operation result with status and data
        """
        try:
            logger.info("Manufacturing operation",
                      device_id=device_id,
                      device_type=device_type,
                      category=category,
                      action=action)
    
            if device_type == "3d_printer":
                return await self._handle_3d_printer(device_id, category, action,
                                                   file_path=file_path,
                                                   temperature=temperature,
                                                   speed=speed,
                                                   position=position,
                                                   gcode=gcode,
                                                   monitor_type=monitor_type,
                                                   maintenance_action=maintenance_action)
            elif device_type == "cnc_machine":
                return await self._handle_cnc_machine(device_id, category, action,
                                                    file_path=file_path,
                                                    speed=speed,
                                                    position=position,
                                                    gcode=gcode)
            elif device_type == "laser_cutter":
                return await self._handle_laser_cutter(device_id, category, action,
                                                      file_path=file_path,
                                                      speed=speed,
                                                      position=position)
            else:
                return format_error_response(f"Unsupported device type: {device_type}",
                                           error_type="validation_error")
    
        except Exception as e:
            return handle_tool_error("robot_manufacturing", e,
                                   device_id=device_id,
                                   device_type=device_type,
                                   category=category,
                                   action=action)
  • Registration of the robot_manufacturing tool by calling the register() method on the RobotManufacturingTool instance during server initialization.
    self.robot_manufacturing.register()  # Manufacturing: 3D printers, CNC, laser cutters
    logger.debug("Registered robot_manufacturing tool")
  • The register() method in RobotManufacturingTool that defines and registers the tool function with the MCP server using the @self.mcp.tool() decorator.
    def register(self):
        """Register manufacturing tool with MCP server."""
  • Input schema defined by function parameters with type hints for device control, including required fields like device_id, device_type, category, action, and optional parameters for specific operations.
    async def robot_manufacturing(
        device_id: str,
        device_type: Literal["3d_printer", "cnc_machine", "laser_cutter"],
        category: Literal["control", "monitor", "maintenance"],
        action: str,
        # Control parameters
        file_path: Optional[str] = None,
        temperature: Optional[Dict[str, float]] = None,
        speed: Optional[float] = None,
        position: Optional[Dict[str, float]] = None,
        gcode: Optional[str] = None,
        # Monitor parameters
        monitor_type: Optional[str] = None,
        # Maintenance parameters
        maintenance_action: Optional[str] = None,
    ) -> Dict[str, Any]:
  • Helper method _handle_3d_printer that dispatches 3D printer operations to control, monitor, or maintenance sub-handlers.
    async def _handle_3d_printer(self, device_id: str, category: str, action: str, **kwargs) -> Dict[str, Any]:
        """Handle 3D printer operations."""
        try:
            if category == "control":
                return await self._handle_3d_printer_control(device_id, action, **kwargs)
            elif category == "monitor":
                return await self._handle_3d_printer_monitor(device_id, action, **kwargs)
            elif category == "maintenance":
                return await self._handle_3d_printer_maintenance(device_id, action, **kwargs)
            else:
                return format_error_response(f"Unknown 3D printer category: {category}",
                                           error_type="validation_error")
        except Exception as e:
            return handle_tool_error("_handle_3d_printer", e, device_id=device_id, category=category, action=action)
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While it mentions 'control and monitor' operations, it doesn't specify whether these are read-only or destructive, what permissions are required, rate limits, or error conditions. The description lacks critical behavioral context for a tool with potentially dangerous physical operations.

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?

Well-structured with clear sections: purpose statement, device examples, parameter explanations, and return information. The 'Args' section is comprehensive but could be more concise for some parameters. Overall efficient with minimal wasted space, though the parameter list is quite lengthy.

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

Completeness3/5

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

Given the complexity (11 parameters, physical operations, no annotations) and the presence of an output schema, the description is moderately complete. It explains parameters well and mentions returns, but lacks critical behavioral context about safety, permissions, and error handling for manufacturing equipment control. The output schema helps but doesn't compensate for missing operational guidance.

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

Parameters4/5

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

The description provides excellent parameter semantics with a detailed 'Args' section explaining each of the 11 parameters. With 0% schema description coverage, this fully compensates by explaining what each parameter means, including examples for device_type and category enums. The only minor gap is that some parameters like 'action' could use more specific guidance.

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

Purpose4/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 as 'Control and monitor manufacturing equipment' with specific examples (3D printers, CNC, laser cutters). It distinguishes from siblings by focusing on manufacturing equipment rather than general robotics, though it doesn't explicitly contrast with tools like 'robot_control' or 'robot_behavior'.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives. The description doesn't mention sibling tools or differentiate this manufacturing-focused tool from more general robotics tools like 'robot_control' or 'robot_behavior'. It simply lists what the tool does without context about appropriate use cases.

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/sandraschi/robotics-mcp'

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