Skip to main content
Glama
egn88

Build Runner MCP Server

by egn88
README.md
# Build Runner MCP Server

A Model Context Protocol (MCP) server that provides structured build, compile, and test operations with parsed output to reduce token usage and improve readability.

## Features

- **Java version switching** via SDKMAN (`sdk use java <version>`)
- **Compilation** with structured error output
- **Build/Package** with success/failure summary
- **Test execution** with parsed test results (passed, failed, skipped)
- **Multi-build-system support**: Maven, Gradle, npm/pnpm/yarn

## Installation

```bash
# Clone the repository
git clone <repository-url>
cd build-runner-mcp

# Install dependencies
npm install

# Build the project
npm run build
```

## Configuration

Add to your Claude Code settings (`~/.claude.json`):

```json
{
  "mcpServers": {
    "build-runner": {
      "command": "node",
      "args": ["/path/to/build-runner-mcp/build/index.js"]
    }
  }
}
```

## Available Tools

### `detect_project`
Detect project type, build system, test framework, and configuration.

```json
{
  "projectPath": "/path/to/project"
}
```

Returns: Project info including languages, build system, package manager, and test framework.

### `set_java_version`
Switch Java version using SDKMAN before running commands.

Available versions: 17.0.16-amzn, 21.0.8-tem, 21.0.9-amzn, 25.0.1-tem

```json
{
  "version": "17.0.16-amzn"
}
```

### `compile_project`
Compile a Java project using Maven or Gradle.

```json
{
  "projectPath": "/path/to/project",
  "javaVersion": "17.0.16-amzn",
  "clean": false,
  "module": "core"
}
```

Returns: Structured compile errors and warnings with file, line, column, and message.

### `build_project`
Build/package a Java project.

```json
{
  "projectPath": "/path/to/project",
  "javaVersion": "21.0.8-tem",
  "skipTests": true,
  "clean": true
}
```

Returns: Build artifacts with paths and sizes, duration, and any errors.

### `run_tests`
Run tests for a Java project with structured results.

```json
{
  "projectPath": "/path/to/project",
  "javaVersion": "17.0.16-amzn",
  "testPattern": "UserServiceTest",
  "module": "api",
  "failFast": true
}
```

Returns:
```json
{
  "success": false,
  "summary": { "total": 50, "passed": 47, "failed": 2, "skipped": 1, "duration": "12.5s" },
  "failures": [
    {
      "testClass": "UserServiceTest",
      "testMethod": "testLogin",
      "message": "Expected 200 but got 401",
      "stackTrace": "...",
      "file": "UserServiceTest.java",
      "line": 42
    }
  ]
}
```

### `node_build`
Build a Node.js/TypeScript project.

```json
{
  "projectPath": "/path/to/project",
  "script": "build",
  "packageManager": "pnpm"
}
```

### `node_typecheck`
Type check a TypeScript project using `tsc --noEmit`.

```json
{
  "projectPath": "/path/to/project"
}
```

### `node_test`
Run tests for a Node.js/TypeScript project (Jest, Vitest, or Mocha).

```json
{
  "projectPath": "/path/to/project",
  "testPattern": "user.test.ts",
  "failFast": true,
  "coverage": true
}
```

## Token Savings

### Before (raw Maven test output): ~500 lines
```
[INFO] Scanning for projects...
[INFO] --- maven-surefire-plugin:3.0.0:test ---
... (hundreds of lines)
[ERROR] Tests run: 50, Failures: 2, Errors: 0, Skipped: 1
```

### After (structured): ~20 lines
```json
{
  "success": false,
  "summary": { "total": 50, "passed": 47, "failed": 2, "skipped": 1 },
  "failures": [
    { "testClass": "UserServiceTest", "testMethod": "testLogin", "message": "Expected 200 but got 401" }
  ]
}
```

## SDKMAN Integration

The server automatically sources SDKMAN and switches Java versions when specified:

```bash
source "$HOME/.sdkman/bin/sdkman-init.sh" && sdk use java 17.0.16-amzn && mvn compile
```

## Development

```bash
# Run in development mode
npm run dev

# Build
npm run build

# Clean build artifacts
npm run clean
```

## License

MIT

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation4/5

Most tools cleanly separate by ecosystem and build phase: Java build/install/compile/test versus Node build/test/typecheck. The only real ambiguity is compile_project vs build_project, since compilation is normally part of a build, but the descriptions clarify that compile focuses on diagnostics while build produces artifacts.

Naming Consistency3/5

Naming is mixed: Java tools mostly follow verb_project (build_project, install_project, compile_project), while Node tools follow node_verb (node_test, node_build, node_typecheck). run_tests breaks the Java pattern by using a generic verb instead of something like test_project, and set_java_version follows yet another style.

Tool Count5/5

Nine tools is well-scoped for a multi-language build runner. Each tool covers a meaningful build, test, install, detect, or environment-management action without feeling padded or redundant.

Completeness4/5

The surface covers the core Java and Node.js workflows: detection, building, compiling, testing, installing for Java, and type checking for TypeScript projects. Minor gaps like a Node install/publish command or a generic clean task are absent, but agents can still complete typical build-and-test workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues