Kotlin / JVM
Embed the StackQL MCP server in a Kotlin or JVM application, as a library or a Gradle plugin. The client is the official Kotlin MCP SDK.
The embedded binary is downloaded and sha256-verified on first run, or vendored into your app. See the common contract.
Install
Add the io.stackql:stackql-mcp library:
dependencies {
implementation("io.stackql:stackql-mcp:0.1.0")
}
Requires JDK 17 and Kotlin 2.x. The client comes from the official Kotlin MCP SDK.
Quick start
import io.stackql.mcp.LaunchArgs
import io.stackql.mcp.Mode
import io.stackql.mcp.StackqlMcp
suspend fun main() {
val server = StackqlMcp.builder()
.mode(Mode.ReadOnly)
.auth(LaunchArgs.authFor("github", "null_auth"))
.start()
server.use {
val tools = server.client.listTools().tools
println("${tools.size} tools available")
}
}
The API is StackqlMcp.builder() with .mode(), .auth(), and .start(), the Mode enum, and LaunchArgs.authFor().
Modes
The builder defaults to Mode.ReadOnly. Call .mode() with Mode.Safe, Mode.DeleteSafe, or Mode.FullAccess to escalate. Escalation is explicit - the server will not enable mutation or lifecycle tools unless you opt in.
Vendoring / embedding
The library downloads, verifies, and caches the signed binary in the shared cache at ~/.stackql/mcp-server-bin/, independent of the working directory. The Gradle plugin wires the same launch into your build, so CI tasks can run StackQL queries without a separate install step.
Demo app
costgate gates infrastructure deploys on cost budgets. It ships both as a CLI and as a Gradle plugin.
As a CLI:
costgate check --intent examples/costgate.yaml --explain
As a Gradle plugin:
plugins {
id("io.stackql.costgate") version "0.1.0"
}
costgate {
intent.set(layout.projectDirectory.file("costgate.yaml"))
explain.set(true)
}