Skip to main content
Glama

get_jcmd_output

Execute jcmd subcommands to monitor and diagnose Java processes by providing process ID and optional subcommand parameters.

Instructions

执行 jcmd 子命令

        Args:
            pid (str): 进程ID,使用字符串形式(如:"12345")
            subcommand (Optional[str]): jcmd子命令,如果不指定则执行help命令

        Returns:
            Dict: 包含jcmd执行结果的字典,包含以下字段:
                - raw_output (str): 原始输出
                - timestamp (float): 时间戳
                - success (bool): 是否成功
                - error (Optional[str]): 错误信息
        

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pidNo
subcommandNo

Implementation Reference

  • The handler function for the 'get_jcmd_output' MCP tool. Includes registration via @self.mcp.tool() decorator, input validation, and execution logic delegating to JcmdCommand.
    @self.mcp.tool()
    def get_jcmd_output(pid: str = "", 
                       subcommand: Optional[str] = None) -> Dict:
        """执行 jcmd 子命令
    
        Args:
            pid (str): 进程ID,使用字符串形式(如:"12345")
            subcommand (Optional[str]): jcmd子命令,如果不指定则执行help命令
    
        Returns:
            Dict: 包含jcmd执行结果的字典,包含以下字段:
                - raw_output (str): 原始输出
                - timestamp (float): 时间戳
                - success (bool): 是否成功
                - error (Optional[str]): 错误信息
        """
        try:
            validated_pid = self._validate_and_convert_id(pid if pid else None, "process ID")
            if validated_pid is None:
                return {
                    "raw_output": "",
                    "timestamp": time.time(),
                    "success": False,
                    "error": "Invalid process ID"
                }
        except ValueError as e:
            return {
                "raw_output": "",
                "timestamp": time.time(),
                "success": False,
                "error": str(e)
            }
        
        cmd = JcmdCommand(self.executor, JcmdFormatter())
        result = cmd.execute(str(validated_pid), subcommand=subcommand)
        return {
            "raw_output": result.get('output', ''),
            "timestamp": time.time(),
            "success": result.get('success', False),
            "error": result.get('error')
        }
  • Helper class JcmdCommand that constructs the jcmd shell command for a given PID and subcommand.
    class JcmdCommand(BaseCommand):
        """Jcmd命令实现"""
    
        def __init__(self, executor, formatter):
            super().__init__(executor, formatter)
            self.timeout = 30
    
        def get_command(self, pid: str, subcommand: Optional[str] = None, *args, **kwargs) -> str:
            if subcommand:
                return f'jcmd {pid} {subcommand}'
            else:
                return f'jcmd {pid}'
  • Helper class JcmdFormatter that formats the output of jcmd command execution into a dictionary.
    class JcmdFormatter(OutputFormatter):
        """Jcmd输出格式化器(仅文本输出)"""
    
        def format(self, result: CommandResult) -> Dict[str, Any]:
            if not result.success:
                return {
                    "success": False,
                    "error": result.error,
                    "timestamp": result.timestamp.isoformat()
                    }
            return {
                "success": True,
                "output": result.output,
                "execution_time": result.execution_time,
                "timestamp": result.timestamp.isoformat()
                }

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/xzq-xu/jvm-mcp-server'

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