DevOps and observability MCP servers compared
Eight official MCP servers for infrastructure and operations work (Kubernetes, Terraform, Buildkite, Azure DevOps, Heroku, Datadog, Grafana and Sentry) compared on what they cover, where they run, how they authenticate and how far their read-only modes actually go.
Comparison
| Entry | Covers | Where it runs | Auth | Read-only and write controls | Tools we counted | License |
|---|---|---|---|---|---|---|
| Kubernetes MCP Server | Any Kubernetes or OpenShift resource (generic CRUD), pods (logs, exec, run, top), events, namespaces, nodes; optional toolsets for Helm, Tekton, KubeVirt, Kiali and more | You run it: single Go binary, npx, uvx or container; stdio by default, Streamable HTTP at /mcp when port is set; uses your kubeconfig or in-cluster config | Kubernetes credentials from kubeconfig or the pod's ServiceAccount; optional OAuth in HTTP mode | TOML read_only = true keeps only readOnlyHint tools; disable_destructive = true drops delete/update tools but keeps pods_run; toolsets limit what is loaded | v0.0.67, default toolsets: 20 tools; read_only: 14; disable_destructive: 15 | Apache-2.0 |
| Terraform MCP Server | Terraform Registry search (providers, modules, policies); with a token, HCP Terraform / Terraform Enterprise orgs, workspaces, variables, runs, plans, state and teams | You run it: binary or Docker; stdio or Streamable HTTP, with an organization allowlist and token pass-through for central deployments | None for the public registry; TFE_TOKEN for HCP Terraform / Enterprise | No token means registry-only (read). ENABLE_TF_OPERATIONS (default false) gates the tools that need explicit approval; in our run it added action_run, delete_project, delete_team, delete_workspace_safely and force_unlock_workspace | v1.3.0: 9 tools with no token; 56 with a token; 61 with a token and ENABLE_TF_OPERATIONS=true | MPL-2.0 |
| Buildkite MCP Server | Pipelines, builds, jobs, logs, artifacts, annotations, clusters and queues, Test Engine runs and tests; build comparison and failure summaries | Hosted by Buildkite at mcp.buildkite.com (recommended), or run the Go server yourself over stdio or HTTP | Hosted: OAuth at /mcp, or a Buildkite API token as a bearer token at /direct. Local: BUILDKITE_API_TOKEN | Hosted read-only endpoint /mcp/readonly; local --read-only; --enabled-toolsets (a retries toolset can retry jobs without write_builds); token scopes still apply | v1.28.0 local: 72 tools; with --read-only: 49 | MIT |
| Azure DevOps MCP Server | Projects, teams, repos and pull requests, work items, pipelines and builds, wikis, test plans, iterations, Advanced Security alerts | Hosted remote server at mcp.dev.azure.com/{organization} (recommended; will replace the local one) or local stdio via npx @azure-devops/mcp (Node.js 20+) | Remote: Microsoft Entra ID (OAuth); local: PAT or Entra ID. Docs say Claude Desktop and Codex need the local server, and Cursor and Claude Code need a custom Entra app registration for the remote one | X-MCP-Readonly header restricts the remote server to read-only tools; local server can load selected domains only | Not counted: the local server would not start here (its keytar dependency needs libsecret); see Microsoft's tool tables | MIT |
| Heroku Platform MCP Server | Apps (create, deploy, info), dynos and scaling, add-ons, logs and maintenance mode, pipelines, teams and Private Spaces, Heroku Postgres | You run it locally over stdio; needs the Heroku CLI 10.8.1 or later | heroku mcp:start reuses the CLI login; npx @heroku/mcp-server takes HEROKU_API_KEY | No read-only switch documented in the README; limit what the logged-in account can do. Heroku calls the server early development | Not counted (needs the Heroku CLI) | Apache-2.0 |
| Datadog MCP Server | Logs, metrics, traces/APM, monitors, dashboards, incidents, security signals and more, grouped into toolsets | Managed by Datadog only; one endpoint per Datadog site (US1 mcp.datadoghq.com/v1/mcp, EU mcp.datadoghq.eu); not on GovCloud sites | OAuth, or a personal/service access token, or API + application keys as headers | Runs with the signed-in user's permissions, so RBAC and data access controls apply; write tools need the matching permission (e.g. monitors_write); toolsets and omit_tools trim the list; every call is in Audit Trail | Not counted (needs a Datadog account). Fair-use limits: 50 requests per 10 s, 100,000 tool calls a month | Not stated (hosted service; the GitHub repo holds examples) |
| Grafana MCP Server | Dashboards, data sources, Prometheus, Loki, Tempo and Pyroscope queries, alerting, incidents, OnCall, Sift investigations, annotations, snapshots, plugins | You run it: Go binary, Docker or Helm; stdio, SSE or Streamable HTTP; works with self-hosted Grafana and Grafana Cloud | Grafana service account token (or per-request headers over Streamable HTTP) | --disable-write removes create/update/delete tools and switches alerting tools and grafana_api_request to read-only (GET only); --disable-<category> and --enable-write-tools fine-tune it | v1.6.3: 81 tools; with --disable-write: 65, all annotated readOnlyHint | Apache-2.0 |
| Sentry MCP | Organizations, projects, issues and events search, issue updates, Seer analysis; built for human-in-the-loop debugging in coding agents rather than all of Sentry | Hosted by Sentry at mcp.sentry.dev/mcp, or stdio via npx @sentry/mcp-server (also for self-hosted Sentry with --host) | Hosted: OAuth, or a Sentry token sent as Sentry-Bearer; local: a user auth token | Skills select tool groups (--skills / ?skills=, e.g. inspect without triage drops update_issue); --disable-skills removes groups; token scopes still apply | v0.42.0 stdio: 9 tools by default; --skills=inspect: 7; --skills=inspect,triage: 8 | FSL-1.1-Apache-2.0 |
Verdict: For an investigation or on-call agent, start read-only everywhere: Grafana with --disable-write, Buildkite's /mcp/readonly, Azure DevOps with X-MCP-Readonly, Kubernetes with read_only = true and a read-only ServiceAccount, Terraform without ENABLE_TF_OPERATIONS, Sentry with the inspect skill. Datadog and Heroku have no server-side read-only switch, so their safety comes from the user or account you connect as. Add write access one tool group at a time, and only where a human approves the call.
What this covers
These are the official MCP servers an operations or on-call agent is most likely to be given: the cluster (Kubernetes MCP Server), infrastructure as code (Terraform), CI (Buildkite, Azure DevOps), a PaaS (Heroku) and production telemetry (Datadog, Grafana, Sentry). For source hosting and pull requests, see the GitHub and GitLab servers. For cloud accounts, see AWS MCP Servers and Cloudflare's servers.
What was checked by running things on 2026-10-20: we started five of the servers on a Linux box and called initialize and tools/list with a small stdio client, with and without each read-only setting. We used dummy credentials and called no tools, so these numbers show which tools a client sees. They do not show what the backend would allow.
- Kubernetes MCP Server v0.0.67 (npx) with a kubeconfig pointing at an unreachable cluster: 20 tools with the default
coreandconfigtoolsets, 14 withread_only = true, 15 withdisable_destructive = true. - Terraform MCP Server v1.3.0 (built with
go install): 9 registry tools with no token, 56 withTFE_TOKENset, 61 withENABLE_TF_OPERATIONS=trueas well. - Buildkite MCP Server v1.28.0: 72 tools, 49 with
--read-only. - Grafana MCP v1.6.3: 81 tools, 65 with
--disable-write. - Sentry MCP 0.42.0 (
npx @sentry/mcp-server): 9 tools, 7 with--skills=inspect. - Not run: Azure DevOps' local server failed to start because a native dependency (keytar) needs
libsecret, which was not installed. Heroku needs the Heroku CLI, and Datadog is hosted-only and needs an account. Their rows come from the docs.
What "read-only" means in each server
Read-only switches mostly work by hiding tools from the model. The cluster or service still enforces only what the credential allows, so treat the switch as one layer and the credential as the real boundary.
- Hiding tools by annotation. Kubernetes'
read_onlykeeps only tools annotatedreadOnlyHint. Grafana's--disable-writeand Buildkite's--read-onlydrop their mutating tools. In our runs, every tool left after each switch carriedreadOnlyHint. - "Not destructive" is not "read-only". Kubernetes'
disable_destructiveremovedpods_delete,pods_exec,resources_create_or_update,resources_deleteandresources_scale. It keptpods_run, which starts a container in your cluster. Useread_onlywhen you mean read-only. - Tools that change behavior. With
--disable-write, Grafana keepsalerting_manage_rules,alerting_manage_silencesandgrafana_api_request, but each tool's description and annotations say it is read-only (list and get only, or GET requests only). - Gated by default. Terraform's dangerous tools are off unless you set
ENABLE_TF_OPERATIONS. With a token but without that flag, we still saw write tools such ascreate_run,update_workspaceandcreate_workspace_variable. So a token alone gives the agent more than read access. For a registry-only research agent, run it without a token. - Choosing at the endpoint. Buildkite (
/mcp/readonly) and Azure DevOps (X-MCP-Readonly) let you choose read-only on the hosted server itself, without running anything locally. Keep that URL or header somewhere the agent cannot edit. - No switch. Datadog has no server-side read-only flag. Instead, the server runs as the signed-in user and checks write permissions such as
monitors_writeon every call. Use a read-only role or a scoped service account. Heroku's README documents no read-only mode, so limit the account behind the CLI login or API key.
Credentials: who the agent is
The hosted servers (Buildkite, Azure DevOps, Datadog, Sentry, and Mapbox outside this list) use OAuth for interactive clients. Most also accept a token header for headless agents: Buildkite's /direct with a bearer token, Datadog's access tokens or API and application keys, and Sentry's Sentry-Bearer header. Sentry keeps Bearer reserved for MCP OAuth tokens. For a background agent, create a dedicated service account with the narrowest role rather than reusing a person's token. Datadog records every call in Audit Trail and tags it as an MCP action, which helps reviews. Agent auth and delegated access and agent identity and MCP auth cover the patterns, and the MCP authorization spec defines the OAuth flow these hosted servers use.
For Kubernetes, the server's README links a setup guide for a dedicated ServiceAccount with read-only access. That is worth doing even with read_only = true, because the RBAC role is what the API server enforces.
Keeping the tool list small
Large tool lists cost context and make wrong picks more likely. With a token, Terraform offers 56 tools and Grafana 81 by default. All eight servers can be trimmed. Kubernetes and Buildkite use toolsets, Grafana uses --disable-<category> flags, Datadog uses the toolsets URL parameter or header (and omit_tools), Sentry uses skills, and Azure DevOps' local server loads selected domains. Datadog also truncates long responses and gives most tools a max_tokens parameter. The Toolathlon benchmark found that most models lose accuracy when tool output is very long.
A read-only investigation setup
- Telemetry: Grafana with
--disable-write, or Datadog as a read-only user, plus Sentry with--skills=inspect. - Changes and CI: Buildkite at
https://mcp.buildkite.com/mcp/readonly, or Azure DevOps withX-MCP-Readonly: true, plus the GitHub server in read-only mode. - Cluster: the Kubernetes MCP Server with
read_only = trueand a read-only ServiceAccount kubeconfig. - Let the agent propose fixes, such as a rollback, a retried job or a silence, as text or a pull request, and have a human approve the action. If you later enable a write tool, enable one group at a time (for example Buildkite's
retriestoolset, which can retry jobs withoutwrite_builds).
To choose servers in general, see pick an MCP server. To run untrusted code that the agent writes during an investigation, see self-hosted agent sandboxes.
Directory entries in this comparison
- Kubernetes MCP Server: Go-native MCP server for Kubernetes and OpenShift: CRUD on any resource, pods (logs, exec, top), events, Helm, Tekton and KubeVirt, talking to the API server directly.
- Terraform MCP Server: HashiCorp's MCP server for the Terraform Registry (providers, modules, policies) and HCP Terraform / Terraform Enterprise workspaces.
- Buildkite MCP Server: Official Buildkite MCP server exposing pipelines, builds, jobs, logs, annotations and Test Engine results, hosted (OAuth or token) or self-run, with read-only routes.
- Azure DevOps MCP Server: Microsoft's MCP server for Azure DevOps: projects, repos, pull requests, work items, pipelines and builds, wikis, test plans and Advanced Security alerts.
- Heroku Platform MCP Server: Heroku's official MCP server: lets agents create, deploy, scale and inspect apps, run Postgres operations, manage add-ons and read logs on the Heroku Platform.
- Datadog MCP Server: Datadog's managed remote MCP server: agents query logs, metrics, traces/APM, monitors, dashboards, incidents and security signals with the user's own permissions.
- Grafana MCP Server: Grafana's MCP server for querying dashboards, data sources and observability data from AI agents.
- Sentry MCP: Sentry's remote MCP server for coding agents, focused on developer debugging workflows over the Sentry API.
- GitHub MCP Server: GitHub's official MCP server: lets agents read repos and code, manage issues and PRs, analyze code and monitor Actions workflows.
- GitLab MCP Server: GitLab's built-in MCP server for working with projects, issues, merge requests, work items and pipelines from MCP clients; GA in GitLab 19.5.
- AWS MCP Servers (awslabs): Suite of open-source, specialized MCP servers from AWS Labs for working with AWS services.
- Cloudflare MCP Servers: Cloudflare's own remote MCP servers for managing and querying Cloudflare services from MCP clients.
- Agent Sandbox (Kubernetes SIG Apps): Kubernetes CRD and controller for isolated, stateful, singleton sandbox pods for agent runtimes and RL, with templates, claims and warm pools.
- MCP Authorization (OAuth 2.1 for MCP): The MCP specification's transport-level authorization flow for HTTP-based MCP servers, based on a subset of OAuth 2.1 and related RFCs.
- Toolathlon (Tool Decathlon): Benchmark of 108 long-horizon agent tasks across 32 real applications and 604 tools (mostly MCP servers), each checked by a deterministic evaluation script.
Related
- Pick an MCP server (Skill)
- Database MCP servers compared (Comparison)
- Connect an agent to a remote MCP server (Guide)
- Agent auth and delegated access, step by step (Guide)
- Agent identity and MCP authorization platforms (Comparison)
- Add MCP servers to Claude Code (Guide)
- Observability and eval platforms for AI agents (Comparison)
- Self-hosted sandboxes for agents compared (Comparison)
- MCP gateways compared (Comparison)
Sources
- Kubernetes MCP Server README, accessed
- Kubernetes MCP Server configuration reference, accessed
- Terraform MCP Server README, accessed
- Terraform MCP Server docs, accessed
- Buildkite MCP server overview, accessed
- Buildkite MCP Server README, accessed
- Azure DevOps remote MCP Server, accessed
- Azure DevOps MCP Server README, accessed
- Heroku MCP Server README, accessed
- Heroku Dev Center, Heroku MCP Server, accessed
- Datadog MCP Server, accessed
- Set Up the Datadog MCP Server, accessed
- Grafana MCP server README, accessed
- Sentry Toolkit README (Sentry MCP), accessed
- Sentry Toolkit license, accessed