The stdin parameter is what lifts this above a simple command runner — you can pipe a script or a document into a command instead of escaping it into an argument. Take the obvious precaution: anything your user can run, this can run, so keep it to a machine you are willing to have driven. The 60-second ceiling also means long builds belong elsewhere; run those directly and use this for the short commands.
A Java MCP server that executes shell commands on the host system, built as separate modules so you can pick the transport your client needs.
- `run_command` — a required `command`, plus optional `workdir` and `stdin` to pipe input in
- Structured results: stdout, stderr, a message when it fails, and an isError flag
- Three transports built from one repository: stdio for desktop clients, plus HTTP and SSE
- Commands time out after 60 seconds, so a hung process does not hold the client
- Enhanced handling for the Fish shell, and cross-platform support across macOS, Linux and Windows
- Logback logging with configurable levels and optional rolling files, set through `LOG_DIR` and `LOG_LEVEL`
- An optional GraalVM native binary if you would rather not launch a JVM per session
Java 25 or higher, and Gradle to build from source. `./gradlew build` produces a jar per transport; point Claude Desktop at the stdio one with an absolute path, or at the native executable if you compiled it.
