mcp-jacoco-reporter

mcp-jacoco-reporter

2

MCP-JaCoCo is a server tool that optimizes JaCoCo code coverage reports for Large Language Models (LLMs). It simplifies XML reports into JSON format, improving AI analysis and enhancing testing workflows.

MseeP.ai Security Assessment Badge

MCP-JaCoCo

MCP-JaCoCo is a server tool that converts JaCoCo code coverage reports into formats optimized for Large Language Models (LLMs), making AI-driven analysis easier and more effective.

Why It Matters

As AI and LLMs play a bigger role in software development, traditional code coverage reports—like those from JaCoCo—need a makeover. While great for humans, their XML format isn’t ideal for AI tools to process or analyze. MCP-JaCoCo bridges this gap by transforming these reports into LLM-friendly formats, unlocking powerful benefits for development teams:

  • Quick, meaningful summaries of code coverage
  • Easy identification of untested or poorly tested code
  • Smart suggestions for new test cases
  • Streamlined AI-assisted test planning
  • Automated documentation of coverage results With MCP-JaCoCo, teams can tap into AI’s full potential, boosting efficiency and insight in testing workflows.

What It Solves

  • Complex Formats: Simplifies JaCoCo’s dense XML reports for AI use
  • Scattered Data: Pulls coverage metrics into one accessible place
  • Slow Analysis: Cuts down on time-consuming manual reviews
  • Integration Hurdles: Makes raw data play nicely with AI tools

Key Features

  • Smart Conversion: Transforms JaCoCo XML reports into LLM-friendly JSON format
  • Flexible Coverage Types: Supports multiple coverage metrics (instruction, branch, line, etc.)
  • Efficient Processing: Fast and lightweight report processing
  • Structured Output: Well-organized JSON format for easy AI consumption
  • Customizable Analysis: Filter coverage data by specific metrics of interest

Installation

Install MCP-JaCoCo using uv with this configuration:

{
  "mcpServers": {
     "mcp-jacoco-reporter-server": {
      "command": "uv",
      "args": [
        "run",
        "--with",
        "mcp[cli]",
        "mcp",
        "run",
        "/Users/crisschan/workspace/pyspace/mcp-jacoco-reporter/mcp-jacoco-reporter-server.py"
      ],
      "env": {
        "COVERED_TYPES": "nocovered, partiallycovered, fullcovered"
      },
      "alwaysAllow": [
        "jacoco_reporter_server"
      ]
    }
  }
}

Tool

jacoco_reporter_server

  • Reads JaCoCo XML report and returns coverage data in JSON format
  • Input:
    • jacoco_xmlreport_path: Path to JaCoCo xml report path(jacoco.xml)
  • Return:
    • String, formatted JSON data containing coverage metrics

Example output format:

[
    {
        "sourcefile": "PasswordUtil.java",
        "package": "com/cicc/ut/util",
        "lines": {
            "nocovered": [],
            "partiallycovered": []
        },
        "branch": {
            "nocovered": [],
            "partiallycovered": []
        }
    },
    {
        "sourcefile": "UserServiceImpl.java",
        "package": "com/cicc/ut/service/impl",
        "lines": {
            "nocovered": [
                33,
                67,
                69,
                71,
                72
            ],
            "partiallycovered": []
        },
        "branch": {
            "nocovered": [
                67
            ],
            "partiallycovered": [
                32
            ]
        }
    },
    {
        "sourcefile": "Constants.java",
        "package": "com/cicc/ut/constants",
        "lines": {
            "nocovered": [],
            "partiallycovered": []
        },
        "branch": {
            "nocovered": [],
            "partiallycovered": []
        }
    },
    {
        "sourcefile": "AuthException.java",
        "package": "com/cicc/ut/exceptions",
        "lines": {
            "nocovered": [],
            "partiallycovered": []
        },
        "branch": {
            "nocovered": [],
            "partiallycovered": []
        }
    },
    {
        "sourcefile": "UserService.java",
        "package": "com/cicc/ut/service",
        "lines": {
            "nocovered": [],
            "partiallycovered": []
        },
        "branch": {
            "nocovered": [],
            "partiallycovered": []
        }
    }
]