Harness MCP Server
OFFICIAL SERVERManage Harness.io pipelines, deployments, feature flags, cloud costs and more from an MCP client
Query and change cloud and SaaS resources with SQL through the StackQL engine
Official · StackQL Studios Go Local · stdio Cloud platformsDevOps and monitoring
GitHubnpmPyPIDocker HubWebsite
53 popularity score ★ 1.1k ↓ 328/wk
Opens the app, which asks before it adds the server.
claude mcp add stackql -- npx -y @stackql/mcp-server{
"mcpServers": {
"stackql": {
"command": "npx",
"args": [
"-y",
"@stackql/mcp-server"
]
}
}
}{
"mcpServers": {
"stackql": {
"command": "npx",
"args": [
"-y",
"@stackql/mcp-server"
]
}
}
}{
"servers": {
"stackql": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@stackql/mcp-server"
]
}
}
}[mcp_servers.stackql]
command = "npx"
args = ["-y", "@stackql/mcp-server"]gemini mcp add --scope user stackql npx -- -y @stackql/mcp-serverOpens the app, which asks before it adds the server.
claude mcp add stackql -- uvx stackql-mcp-server{
"mcpServers": {
"stackql": {
"command": "uvx",
"args": [
"stackql-mcp-server"
]
}
}
}{
"mcpServers": {
"stackql": {
"command": "uvx",
"args": [
"stackql-mcp-server"
]
}
}
}{
"servers": {
"stackql": {
"type": "stdio",
"command": "uvx",
"args": [
"stackql-mcp-server"
]
}
}
}[mcp_servers.stackql]
command = "uvx"
args = ["stackql-mcp-server"]gemini mcp add --scope user stackql uvx -- stackql-mcp-serverOpens the app, which asks before it adds the server.
claude mcp add stackql -- docker run -i --rm stackql/stackql-mcp{
"mcpServers": {
"stackql": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"stackql/stackql-mcp"
]
}
}
}{
"mcpServers": {
"stackql": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"stackql/stackql-mcp"
]
}
}
}{
"servers": {
"stackql": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"stackql/stackql-mcp"
]
}
}
}[mcp_servers.stackql]
command = "docker"
args = ["run", "-i", "--rm", "stackql/stackql-mcp"]gemini mcp add --scope user stackql docker -- run -i --rm stackql/stackql-mcpGOOGLE_CREDENTIALS |
Optional: Google Cloud service account key, read when querying the google provider; each provider has its own variables. |
|---|---|
STACKQL_GITHUB_USERNAME |
Optional: GitHub user name for the github provider, paired with STACKQL_GITHUB_PASSWORD. |
STACKQL_GITHUB_PASSWORD |
Optional: GitHub token or password for the github provider. |
OKTA_SECRET_KEY |
Optional: API key for the okta provider. |
STACKQL_MCP_BIN |
Optional: npm/PyPI launcher: path to an existing stackql binary, skipping the download. |
STACKQL_MCP_BUNDLE |
Optional: npm/PyPI launcher: path to a local .mcpb bundle to take the binary from, for testing; skips download and sha check. |
In a container, a setting goes in with -e NAME=value after docker run.
StackQL maps the APIs of cloud and SaaS providers (AWS, Azure, Google Cloud, GitHub, Okta, Databricks and others) to tables, so resources can be read with SELECT and created, changed or removed with INSERT, UPDATE, REPLACE, DELETE and EXEC statements. Run with `stackql mcp`, the same engine serves those abilities to an MCP client: the assistant can browse which providers, services, resources and methods exist, install a provider definition from the StackQL registry, check a query plan without running it, and then run queries or lifecycle operations against your accounts.
The npm, PyPI and Docker packages are thin launchers. The npm and PyPI ones download the signed `stackql` binary for your platform from the matching GitHub release on first run, check it against sha256 pins in the package, and cache it under `~/.stackql/mcp-server-bin/`; per their package pages they also set `--approot` to `~/.stackql` and switch off the audit file by default, while the plain binary keeps audit on. `.mcpb` bundles for Claude Desktop and a GitHub Action for CI runs are also published.
What the README does not say: the server has 13 tools, and since the change to a default `mode: safe`, every INSERT, UPDATE, REPLACE, DELETE or EXEC asks the user to approve it through MCP elicitation. A client that does not support elicitation gets those calls refused unless the server is put in `full_access` mode (stackql.io/docs/command-line-usage/mcp).
| Runtime | Node.jsorPythonorDocker |
|---|
Node.js with npx, or uv for uvx, or Docker; alternatively a native stackql binary (Homebrew, installers) run as `stackql mcp --mcp.server.type=stdio`. Internet access on first run to fetch the binary and provider definitions. Accounts and credentials for each cloud or SaaS provider you query, supplied as that provider's environment variables, a dotenv file via `--env.file`, or the `--auth` flag.
The mode (read_only, safe, delete_safe, full_access) is one setting for the whole server, with no per-tool override. In the default safe mode, writes need a client that supports MCP elicitation, otherwise they are refused. Since v0.12.742 a multi-statement payload is gated by its most privileged statement. Request body (HTTP) is capped at 4 MiB and a stdio frame at 8 MiB, neither configurable. A malformed or unreadable `--env.file` stops the server at startup; a missing one is ignored. The HTTP transport exits at startup unless a bearer token variable or `allow_unauthenticated` is configured. Enterprise CA support is marked experimental.
Suits platform and DevOps engineers who already use several clouds or SaaS tools and want one assistant interface that can both inventory and provision resources with SQL, across providers, from their own machine or a CI job. The approval-per-write default and read_only mode make it workable for exploration; full_access is meant for trusted automation with a reviewed audit log. Someone who needs only one provider's console features, or a client without elicitation support but does not want to grant full_access, may find a single-vendor server simpler.
server_inforeload_credentialslist_providerslist_serviceslist_resourceslist_methodsdescribe_methodlist_registrypull_providervalidate_select_queryrun_select_queryrun_mutation_queryrun_lifecycle_operation