"""Integration module for ros-mcp-server with robotmcp_server. This module provides the register() function called by submodule_integration.py. It reads its own configuration from environment variables, keeping ROS-specific configuration encapsulated within this submodule. """ import logging import os from fastmcp import FastMCP from ros_mcp.prompts import register_all_prompts from ros_mcp.resources import register_all_resources from ros_mcp.tools import register_all_tools from ros_mcp.utils.websocket import WebSocketManager logger = logging.getLogger(__name__) # ROS Bridge defaults (can be overridden via environment variables) DEFAULT_ROSBRIDGE_IP = "127.0.0.1" DEFAULT_ROSBRIDGE_PORT = 9090 DEFAULT_TIMEOUT = 5.0 def register(mcp: FastMCP, **kwargs) -> None: """Register all ROS MCP tools, resources, and prompts. This is the main entry point called by submodule_integration.py. Configuration is read from environment variables, not passed as parameters. Environment variables: ROSBRIDGE_IP: IP address of rosbridge server (default: 127.0.0.1) ROSBRIDGE_PORT: Port of rosbridge server (default: 9090) ROS_DEFAULT_TIMEOUT: Default timeout for ROS operations (default: 5.0) Args: mcp: FastMCP instance to register with **kwargs: Ignored (for forward compatibility) """ rosbridge_ip = os.getenv("ROSBRIDGE_IP", DEFAULT_ROSBRIDGE_IP) rosbridge_port = int(os.getenv("ROSBRIDGE_PORT", str(DEFAULT_ROSBRIDGE_PORT))) default_timeout = float(os.getenv("ROS_DEFAULT_TIMEOUT", str(DEFAULT_TIMEOUT))) logger.info(f"[ROS_MCP] Initializing with rosbridge at {rosbridge_ip}:{rosbridge_port}") # Create WebSocketManager with configuration ws_manager = WebSocketManager(rosbridge_ip, rosbridge_port, default_timeout=default_timeout) # Register all components register_all_tools(mcp, ws_manager, rosbridge_ip=rosbridge_ip, rosbridge_port=rosbridge_port) register_all_resources(mcp, ws_manager) register_all_prompts(mcp) logger.info("[ROS_MCP] Registration complete")