Skip to main content

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.

info

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)
}

github.com/stackql/stackql-mcp-kotlin