Triagic docs
Integrations

Infrastructure

Step-by-step connection and configuration for Kubernetes, Docker, Terraform and Confluent / Kafka.

What is running, what changed, and what got stuck in a queue on the way.

Kubernetes

kubernetes · runs mcp-server-kubernetes via npx · restricted to the server's read-only tool allowlist, which this catalog pins on: get, describe, logs, explain, list API resources, context and ping. Apply, create, scale, patch, rollout, Helm install and upgrade, exec-in-pod and port-forwarding are not offered.

Overview, prompts and the tool list: /integrations/kubernetes.

Paste the kubeconfig to make this a shared data source

Paste a kubeconfig is the method to pick when you are configuring the cluster once for the whole organization: the file travels with the configuration, is encrypted at rest like any other secret, and lands on every member's desktop on the next sync. No member has to have a kubeconfig on their own machine.

Kubeconfig file on this machine is a file path, and a path only means something on the machine that has that file. Use it for your own laptop, or configure it per-member with Pre-add data sources for members on the Organization page. See Integrations.

Create a read-only service account, rather than pointing at a cluster-admin context:

kubectl create serviceaccount triagic -n default
kubectl create clusterrolebinding triagic-view \
  --clusterrole=view --serviceaccount=default:triagic

The view ClusterRole is Kubernetes' own read-only aggregate.

Choose how to reach the cluster. Authentication method decides which other fields appear.

Paste a kubeconfig is the answer for a shared data source. Produce a self-contained file and paste the whole thing:

kubectl config view --raw --minify --flatten

--raw keeps the credentials (a plain config view redacts them), --minify drops every context except the current one, and --flatten inlines certificates that would otherwise be paths to files no other machine has. Switch context first if the one you want is not current.

Kubeconfig file on this machine is the usual answer for your own laptop: build a kubeconfig from the service account above and give its path.

API server and service-account token suits a machine with no kubeconfig on it. Mint a token for the account and read the cluster's CA out of any existing kubeconfig:

kubectl create token triagic --duration=8760h
kubectl config view --raw --minify \
  -o jsonpath='{.clusters[0].cluster.certificate-authority-data}'

The second command prints the value for Cluster CA certificate. It's already base64-encoded, and it goes in the field as-is. There is no way to give a CA file path here, only that string.

In-cluster service account is for a Triagic running as a pod in the cluster it reads. It takes no fields: the server finds the pod's own mounted service-account token.

Fill the form.

FieldRequiredWhat to put
Authentication methodno, defaults to the file pathSee above.
Kubeconfigyes, with pasteThe whole file, pasted into the box. Encrypted at rest and never shown again after saving.
Kubeconfig pathyes, with Kubeconfig fileAn absolute path on the machine running Triagic, e.g. /Users/you/.kube/config. Not a path on the portal's host, and not on anyone else's laptop.
API server URLyes, with tokenhttps://k8s.example.com:6443
Service-account tokenyes, with tokenThe bearer token from kubectl create token.
Cluster CA certificateno, with tokenThe base64-encoded PEM string, not a path. Filling it also forces certificate verification back on.
Verify TLS certificateno, defaults on, with tokenTurn off only for a self-signed API server with no CA to hand. Ignored when the CA above is filled in.
ContextnoDefaults to the kubeconfig's current context. Set it to pin a cluster, so a member switching contexts locally doesn't repoint the integration.
Default namespaceno, defaults defaultWhere a read looks when the agent names no namespace. Worth setting: default is rarely where the workload is.

Verify. Health check lists API resources.

A Triagic running inside the cluster ignores your kubeconfig path

The server checks for an in-cluster service account before it reads the kubeconfig path. So if Triagic itself runs as a pod, a configured Kubeconfig path is silently skipped and the pod's own service account is used instead, with whatever permissions that account has, not the ones you granted triagic. Choose In-cluster service account there, so the behaviour is the one you asked for. A pasted kubeconfig is the exception: it is read first and wins even inside a pod.

A kubeconfig that logs in through a cloud CLI does not travel

EKS, GKE and AKS kubeconfigs usually authenticate through an exec credential plugin: aws eks get-token, gke-gcloud-auth-plugin, kubelogin. --flatten inlines certificates but cannot inline a program: every machine running that configuration would need the CLI installed and logged in as someone with cluster access, which also means the integration would run with whichever human's credentials that machine has. Use API server and service-account token for those clusters. It needs nothing installed and pins the identity to the service account you created.

If it reportsIt usually means
Failed to parse KUBECONFIG_YAMLThe pasted text is not valid YAML, usually a partial copy, or indentation lost on the way through a chat window. Re-run kubectl config view --raw --minify --flatten and paste all of it.
executable file not found, exec pluginThe kubeconfig authenticates through a cloud CLI that is not installed on that machine. See the callout above.
x509: certificate signed by unknown authority, unable to verify the first certificateWith token: the API server's certificate is not trusted. Fill in Cluster CA certificate, or turn off Verify TLS certificate if it is self-signed and you have no CA.
UnauthorizedThe token expired or was minted for a different cluster. kubectl create token defaults to one hour unless --duration is given.
forbidden: User "system:serviceaccount:…"The service account has no read access. Bind it to the view ClusterRole.
Reads land in the wrong placeDefault namespace is unset, so namespaced reads go to default.

Docker

docker · runs mcp-server-docker via uvx · restricted to the five read-only tools upstream marks as such: list containers, fetch container logs, list images, list networks, list volumes. Create, run, start, stop, remove, pull, push and build exist in that server and are not exposed. The allow-list is the read-only guarantee here, because this server has no read-only switch of its own.

Overview, prompts and the tool list: /integrations/docker.

For "the deploy went out and the container is restarting": what is running, when it last restarted, and what it printed on the way down.

This one needs uv, not the Docker CLI

The server talks to the engine's API socket directly, so the machine running Triagic needs uv and a reachable Docker engine; the docker command itself isn't a prerequisite. (Unlike GitHub, Grafana and Terraform, which run inside a container and therefore do need Docker installed.)

Decide which engine to read. Blank means the Docker engine on the machine running Triagic, which is right for a developer laptop or a Triagic that already lives on the host you care about.

For a remote server, ssh://you@host.example.com is the method to reach for. It uses the OpenSSH configuration of the machine running Triagic, so it works exactly when ssh you@host.example.com works there, and it needs nothing opened on the server. Give that SSH user read access to the socket (on Linux: membership of the docker group).

Only for a tcp:// engine: collect the TLS material. A tcp:// daemon with no TLS is an unauthenticated root shell on that host: treat one as a finding, not as a connection option. With TLS, copy ca.pem, cert.pem and key.pem into one directory on the machine running Triagic; those three names are fixed, because the client appends them to the directory itself.

Fill the form.

FieldRequiredWhat to put
Docker hostnoBlank for the local engine. ssh://you@host.example.com for a remote one. tcp://host.example.com:2376 with the TLS directory below.
TLS certificate directorynoOnly with a tcp:// host: a directory holding ca.pem, cert.pem and key.pem. Setting it turns TLS on and checks the engine's certificate against ca.pem. Saving it against any other kind of host is refused, because it would silently break the connection instead.

Verify. Health check lists containers, a real call to the daemon, so a socket that isn't there fails the save rather than leaving a row that starts and answers nothing.

Docker Desktop may not create /var/run/docker.sock

Docker Desktop only creates the default socket when Settings → Advanced → Allow the default Docker socket to be used is on. With it off, leave nothing blank: set Docker host to unix:///Users/<you>/.docker/run/docker.sock (macOS) or unix:///home/<you>/.docker/desktop/docker.sock (Linux).

If it reportsIt usually means
Error while fetching server API versionNot a version problem: nothing answered at all. The engine is not running, or Docker host points at a socket that does not exist.
permission deniedThe user Triagic runs as cannot read the socket. On Linux, add it to the docker group and log back in.
SSHException, Authentication failed, Host keyssh:// failed. ssh <the same user@host> has to work from that machine first, host key already accepted; nothing here can answer a prompt.
certificate verify failed, SSLErrorThe tcp:// engine's certificate was not accepted. Check the directory really holds ca.pem, cert.pem and key.pem under those names, and that ca.pem signed the daemon's certificate.

Terraform

terraform · runs HashiCorp's official terraform-mcp-server image via Docker · scoped to the workspace/run/state toolset, with run and apply operations disabled.

Overview, prompts and the tool list: /integrations/terraform.

This is for answering what changed (workspaces, runs, plans, plan logs, apply logs and state versions) rather than for reading public registry documentation.

Create an API token. HCP Terraform → Account settings → Tokens, or a team token scoped to read access, which is the least-privilege option. User, team and organization tokens all work.

Get the CA bundle, for Terraform Enterprise behind a private CA. HCP Terraform uses a public CA and needs nothing here. A self-hosted instance usually presents a certificate from your own internal CA, which the container has no reason to trust. Ask whoever runs it for that CA's PEM bundle and save it on the machine running Triagic. You give the host path and it is mounted into the container for you.

Fill the form.

FieldRequiredWhat to put
Terraform addressno, defaults https://app.terraform.ioSet your own URL for Terraform Enterprise. Remember the server runs in a container, so a self-hosted instance on the same machine needs host.docker.internal.
API tokenyes
CA certificate pathno/etc/ssl/certs/tfe-ca.pem, the internal CA bundle, for Terraform Enterprise.
Verify TLS certificateno, defaults onTurn off only for a self-signed certificate you cannot get a CA bundle for.

Verify. Health check is get_token_permissions, not whoami: no such tool exists in the pinned image. It still fails precisely when the token is wrong. Without it the server would still start (the registry side needs no token at all) and every workspace tool would fail later instead.

If it reportsIt usually means
401Wrong token, or a token belonging to a different organization.
404Authenticated but cannot see that organization or workspace. Team tokens are scoped, so check the team has read access.
x509 / certificateA Terraform Enterprise certificate the container doesn't trust. Set CA certificate path to that CA's PEM bundle. Turning off Verify TLS certificate also connects, but then nothing proves who answered.

Confluent / Kafka

confluent · runs @confluentinc/mcp-confluent via npx · read-only is enforced with an explicit allow-list of read tools, so produce-message, delete-topics, connector mutations and the Flink/Tableflow write families are simply not offered.

Overview, prompts and the tool list: /integrations/confluent.

Kafka, Schema Registry, connectors and metrics are covered. Flink is not: this integration sets no Flink credentials, so the server would hide those tools anyway.

Only the first three fields are required. Each remaining block unlocks a group of tools, and a block that is incomplete makes its tools absent rather than broken, which is the single most confusing failure mode here.

Create a Kafka API key. Confluent Cloud → your cluster → API keys → Add key. Keys are per-cluster; a key from a sibling cluster fails with an authentication error.

Create it for a service account, not for your own user account: a key made under "My account" carries everything you can do, and dies with your membership. Give the service account read-only access: the DeveloperRead role (or ACLs granting READ/DESCRIBE) on the topics and consumer groups you want visible. The read-tool allowlist on this side keeps the agent read-only; the service account's grants make that hold at the cluster too, and decide which topics are readable at all.

Collect the cluster's REST endpoint and ID from the cluster overview, if you want the topic and consumer-group tools (you do, consumer lag is the point).

Optionally add the control-plane and Schema Registry keys. The Confluent Cloud API key is a separate, account-level key that lists environments and clusters. The Schema Registry endpoint has its own key pair again.

Only for a self-hosted cluster: write a Kafka client config file.

Confluent Cloud needs nothing here. The server talks SASL/PLAIN over TLS and has no setting for anything else (not SCRAM, not mTLS, not a private CA), so a self-hosted cluster wanting one of those needs a librdkafka properties file, which is the one override that can supply them.

Write it on the machine running Triagic and give the absolute path. Be aware of what you are trading: that file overrides every field above, and it holds credentials on disk in plain text rather than encrypted alongside the rest of this form. Restrict it to the user Triagic runs as.

security.protocol=SASL_SSL
sasl.mechanisms=SCRAM-SHA-512
sasl.username=triagic
sasl.password=…
ssl.ca.location=/etc/ssl/certs/kafka-ca.pem

Fill the form.

FieldRequiredWhat it unlocks
Bootstrap serversyespkc-abc12.us-east-1.aws.confluent.cloud:9092, comma-separated, ports included.
Kafka API key / secretyesConsuming messages, consumer groups.
Kafka REST endpointnoTopic and consumer-group tools. https://pkc-abc12….confluent.cloud:443
Kafka cluster IDnoRequired alongside the REST endpoint. lkc-abc123
Confluent Cloud API key / secretnoListing environments, clusters, organizations.
Schema Registry endpoint + key / secretnoReading schemas.
Kafka client config filenoSASL_SSL, SCRAM, mTLS or a private CA on a self-hosted cluster. Overrides everything above.

Verify. Health check lists topics, a real Kafka read, deliberately not one of the server's credential-free diagnostics, which would answer happily for a broken config.

If it reportsIt usually means
unknown tool / tool not availableA configuration block is incomplete, not a broken server. Topic and consumer-group tools need the REST endpoint and the cluster ID.
401 / 403 / SASLThe Kafka key and secret must be a matching pair issued for this cluster.
ETIMEDOUT, ECONNREFUSEDThe brokers didn't answer from that machine. Check the port is in Bootstrap servers and the network is reachable.

On this page