kubernetes-observability-mcp-server
Provides tools to pull live Dynatrace problems and correlate Davis AI alerts with Kubernetes events, and to retrieve entity health and metadata. It also ships OpenTelemetry traces, metrics, and logs to Dynatrace for self-monitoring via OTLP.
Provides tools for interacting with a Kubernetes cluster, including listing pods, fetching pod logs, describing pods and deployments, retrieving namespace events and health, and debugging networking (network policies, DNS config, CoreDNS health, ingress routing, service endpoints, orphaned services, service mesh configuration, and node network status).
kubernetes-observability-mcp-server
A production-grade Model Context Protocol (MCP) server that gives AI assistants (Claude, Cursor, Windsurf, etc.) direct, structured access to your Kubernetes cluster for operations, network debugging, and Dynatrace observability correlation — with full OpenTelemetry self-monitoring that ships traces, metrics, and logs to Dynatrace automatically.
What This Does
Instead of copy-pasting kubectl output into a chat window, this MCP server lets your AI assistant:
List pods, check logs, describe deployments — directly, without leaving the conversation
Debug network policies, DNS, ingress routing, and service mesh configuration
Pull live Dynatrace problems and correlate them with Kubernetes events
View its own performance in Dynatrace via OTel self-monitoring
Related MCP server: k8s-mcp-server
Architecture
┌─────────────────────────────────────────────────────────────────────┐
│ AI Assistant (Claude Desktop / Cursor) │
│ MCP Client │
└────────────────────────────┬────────────────────────────────────────┘
│ stdio (JSON-RPC)
▼
┌─────────────────────────────────────────────────────────────────────┐
│ kubernetes-observability-mcp-server │
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ K8s Management │ │ Network Debugging│ │ Dynatrace │ │
│ │ │ │ │ │ Correlation │ │
│ │ • list_pods │ │ • analyze_ │ │ │ │
│ │ • get_pod_logs │ │ network_policy │ │ • get_dynatrace_ │ │
│ │ • describe_pod │ │ • check_service_ │ │ problems │ │
│ │ • list_ │ │ endpoints │ │ • correlate_ │ │
│ │ deployments │ │ • find_orphaned_ │ │ alerts_with_ │ │
│ │ • describe_ │ │ services │ │ k8s │ │
│ │ deployment │ │ • debug_dns_ │ │ • get_entity_ │ │
│ │ • get_namespace_ │ │ config │ │ health │ │
│ │ events │ │ • coredns_health_│ │ │ │
│ │ • get_namespace_ │ │ check │ │ │ │
│ │ health │ │ • inspect_ │ │ │ │
│ │ │ │ ingress_routing│ │ │ │
│ │ │ │ • trace_service_ │ │ │ │
│ │ │ │ to_pods │ │ │ │
│ │ │ │ • node_network_ │ │ │ │
│ │ │ │ status │ │ │ │
│ │ │ │ • check_service_ │ │ │ │
│ │ │ │ mesh_config │ │ │ │
│ └────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ withTelemetry() middleware (OTel wrapper) │ │
│ │ span per call • invocation counter • latency histogram │ │
│ └───────────────────────────┬─────────────────────────────────┘ │
└──────────────────────────────│──────────────────────────────────────┘
│ OTLP/HTTP
▼
┌─────────────────────────────────────────────────────────────────────┐
│ Dynatrace │
│ Distributed Traces • Metrics Dashboard • Structured Logs │
└─────────────────────────────────────────────────────────────────────┘
▲
│ API v2 (problems, entities, metrics)
│
┌─────────┴───────────────────────────────────────────────────────────┐
│ Kubernetes Cluster (@kubernetes/client-node) │
│ ~/.kube/config or in-cluster ServiceAccount token │
└─────────────────────────────────────────────────────────────────────┘Prerequisites
Node.js 20+ —
node --versionmust show v20 or highernpm 9+ — comes with Node 20
kubectl configured — run
kubectl cluster-infoand confirm it shows your cluster; the server reads~/.kube/configby defaultDynatrace account — free trial at dynatrace.com works; Dynatrace tools are optional if you only want K8s features
Quick Start
# 1. Clone the repository
git clone https://github.com/mrafay7655/kubernetes-observability-mcp-server.git
cd kubernetes-observability-mcp-server
# 2. Install dependencies
npm install
# 3. Configure environment
cp .env.example .env
# Open .env in your editor and fill in the values (see "Environment Variables" below)
# 4. Build
npm run build
# 5. Verify the server starts (Ctrl+C to exit)
npm start
# Expected output: [mcp] kubernetes-observability-mcp-server running on stdioClaude Desktop Setup
Step 1 — Find your config file
OS | Path |
macOS |
|
Windows |
|
Linux |
|
Step 2 — Add the server entry
Open the config file and add (or merge) the mcpServers block:
{
"mcpServers": {
"kubernetes-observability": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/kubernetes-observability-mcp-server/dist/index.js"],
"env": {
"DT_ENV_URL": "https://YOUR_ENV_ID.live.dynatrace.com",
"DT_API_TOKEN": "dt0c01.YOUR_TOKEN_HERE",
"OTEL_EXPORTER_OTLP_ENDPOINT": "https://YOUR_ENV_ID.live.dynatrace.com/api/v2/otlp",
"OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Api-Token dt0c01.YOUR_TOKEN_HERE",
"OTEL_SERVICE_NAME": "kubernetes-observability-mcp-server"
}
}
}
}Replace /ABSOLUTE/PATH/TO/ with the full path to the cloned repository.
Windows path example:
"args": ["C:\\Users\\YourName\\Projects\\kubernetes-observability-mcp-server\\dist\\index.js"]macOS/Linux path example:
"args": ["/Users/yourname/projects/kubernetes-observability-mcp-server/dist/index.js"]Step 3 — Restart Claude Desktop
Fully quit Claude Desktop (system tray → Quit) and reopen it.
Step 4 — Verify tools are loaded
In a new conversation, click the + button (or the connectors icon) in the chat input bar. You should see kubernetes-observability listed under Integrations or Connected tools. If it shows a connection error, check that the path in args is correct and that npm run build has been run.
Step 5 — Test
Type: List pods in the default namespace
The assistant will call list_pods and return results from your cluster.
Claude Code (CLI) Setup
# Add to your user-level MCP config (persists across projects)
claude mcp add -s user kubernetes-observability \
node /absolute/path/to/dist/index.js \
-e DT_ENV_URL=https://YOUR_ENV_ID.live.dynatrace.com \
-e DT_API_TOKEN=dt0c01.YOUR_TOKEN
# Verify it was added
claude mcp list
# Test a tool call
claude "list all pods in the kube-system namespace"Environment Variables
Variable | Required | Description |
| Yes (for DT tools) | Your Dynatrace environment base URL, e.g. |
| Yes (for DT tools) | API token — must start with |
| No | OTLP endpoint for self-monitoring telemetry |
| No | Auth header: |
| No | Service name in Dynatrace (default: |
| No | Service version tag (default: |
| No |
|
| No | Override kubeconfig path (default: |
K8s-only mode (no Dynatrace): Leave DT_ENV_URL and DT_API_TOKEN unset. All 17 Kubernetes and network tools work without them; only the 3 Dynatrace tools will return an error.
Dynatrace Setup
Creating an API Token
Open your Dynatrace environment:
https://YOUR_ENV_ID.live.dynatrace.comGo to Settings → Integration → Dynatrace API → API tokens
Click Generate new token
Name it
kubernetes-observability-mcp-serverEnable the following scopes:
Scope | Purpose |
| Send custom metrics via OTLP |
| Send structured logs via OTLP |
| Send distributed traces via OTLP |
| Read Davis AI problems |
| Read entity health and metadata |
| Query service metrics (optional — not available on all plans) |
Note: If your Dynatrace plan does not include
metrics.read, skip it. Theget_entity_healthtool gracefully falls back and returns entity metadata without metrics.
Copy the generated token — it will not be shown again.
Verify Your Token Type
Your token must start with dt0c01. — this is an API token.
Tokens starting with dt0s are personal access tokens and will return 401.
OTLP Endpoint Format
https://YOUR_ENV_ID.live.dynatrace.com/api/v2/otlpThe server appends /v1/traces, /v1/metrics, and /v1/logs automatically.
Running Inside a Kubernetes Cluster
To run the server as a Pod inside the cluster (instead of from your laptop), create a ServiceAccount with appropriate RBAC:
apiVersion: v1
kind: ServiceAccount
metadata:
name: mcp-server
namespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: mcp-server-reader
rules:
- apiGroups: [""]
resources: ["pods", "pods/log", "services", "endpoints", "events", "namespaces", "nodes", "configmaps"]
verbs: ["get", "list"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list"]
- apiGroups: ["networking.k8s.io"]
resources: ["networkpolicies", "ingresses", "ingressclasses"]
verbs: ["get", "list"]
- apiGroups: ["discovery.k8s.io"]
resources: ["endpointslices"]
verbs: ["get", "list"]
- apiGroups: ["networking.istio.io", "security.istio.io"]
resources: ["virtualservices", "destinationrules", "peerauthentications"]
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: mcp-server-reader
subjects:
- kind: ServiceAccount
name: mcp-server
namespace: default
roleRef:
kind: ClusterRole
name: mcp-server-reader
apiGroup: rbac.authorization.k8s.ioTools Reference
Tool | Description | Category | Required Permissions |
| List pods in a namespace with status, readiness, and restart counts | Kubernetes |
|
| Fetch logs from a pod (max 1,000 lines) | Kubernetes |
|
| Full pod description: DNS policy, containers, IPs, conditions | Kubernetes |
|
| List deployments with replica counts and conditions | Kubernetes |
|
| Describe a deployment with full container specs | Kubernetes |
|
| K8s events filtered by type or reason (max 200) | Kubernetes |
|
| Health score rollup — pod counts, warnings, overall status | Kubernetes |
|
| Which NetworkPolicies apply to a pod and their risk | Network |
|
| Detect services with no ready backends | Network |
|
| Services whose selectors match no running pods | Network |
|
| CoreDNS health, Corefile config, pod DNS policy | Network |
|
| CoreDNS pod status and restart rate | Network |
|
| IngressClass validation and backend endpoints | Network |
|
| Full path: Service → EndpointSlices → Pods → NetworkPolicies | Network |
|
| Node NetworkUnavailable conditions, PodCIDR allocations | Network |
|
| Istio/Linkerd detection, VirtualServices, mTLS mode | Network |
|
| Dynatrace Davis AI problems, filtered by namespace | Dynatrace |
|
| Correlate Dynatrace alerts with K8s events | Dynatrace |
|
| Dynatrace entity metrics — response time, error rate | Dynatrace |
|
Troubleshooting
Server not appearing in Claude Desktop
Confirm the path in
argsis absolute and the file exists:node /path/to/dist/index.jsCheck for JSON syntax errors in
claude_desktop_config.jsonFully quit and restart Claude Desktop (menu bar → Quit, not just close the window)
CONNECT_TIMEOUT in Claude Code
The server may time out if the OTLP endpoint is unreachable on startup. Ensure OTEL_EXPORTER_OTLP_ENDPOINT points to a valid Dynatrace URL, or leave it unset to disable telemetry.
401 Unauthorized from Dynatrace tools
Token must start with
dt0c01.— personal access tokens (dt0s) are rejectedVerify
problems.readandentities.readscopes are enabled on the token
kubectl / kubeconfig errors
Run
kubectl get podsfrom the same terminal to confirm kubeconfig is validSet
KUBECONFIG=/path/to/configif your config is not at the default location
Tool returns empty results
Kubernetes namespaces default to
"default"— specifynamespaceif your resources are elsewhereCheck
kubectl get pods -n YOUR_NAMESPACEdirectly to confirm resources exist
Security
No credentials in source code — all secrets are loaded from environment variables
No exec or shell commands — uses the
@kubernetes/client-nodelibrary API directly; nokubectlsubprocessRead-only by default — all tools only read cluster state; no writes, no deletes
Input validation — namespace names, event types, entity names, and entity types are validated before being used in API calls
Log limits —
get_pod_logsis capped at 1,000 lines regardless of the requested valueNever commit
.env—.gitignoreexcludes it; rotate any token that was committed
Contributing
Contributions are welcome! Areas for improvement:
Additional Kubernetes resource support (StatefulSets, DaemonSets, Jobs)
Dynatrace SLO querying tool
Prometheus metrics integration
Helm release inspection tool
Kubernetes events streaming
Please open an issue first to discuss major changes.
License
MIT License — see LICENSE for details.
Available Tools
19 toolsanalyze_network_policyA
Analyze which NetworkPolicies apply to a pod and detect traffic restrictions
| Name | Required | Description | Default |
|---|---|---|---|
| pod_name | Yes | Pod name to analyze | |
| namespace | No | Namespace (default: "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden. It does not state that the operation is read-only, whether it needs cluster-wide or namespace-scoped RBAC to read NetworkPolicy objects, or what the analysis result looks like (list of policies vs. a verdict on allowed/denied traffic).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; no repetition of the name or schema. Well sized for a two-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should at least hint at the shape of the analysis (which policies matched, which rules restrict traffic). It also omits any note about permissions or that a missing pod/namespace yields an error, leaving an agent under-informed about results for a tool whose value is entirely in its output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with only two simple parameters, so the schema already conveys pod_name and namespace meaning including the namespace default. The description adds nothing beyond that, which is the expected baseline here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('analyze') and a specific resource ('NetworkPolicies apply to a pod') plus the second outcome ('detect traffic restrictions'). No sibling tool touches network policy, so an agent can route to this without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies when it is useful (pod connectivity or traffic-blocking issues), but there is no explicit when-to-use, when-not-to-use, or named alternative. The agent must infer that this pairs with check_service_endpoints or trace_service_to_pods for connectivity debugging.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_service_endpointsB
Check if service endpoints are ready — detects services with no ready backends
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | Namespace (default: "default") | |
| service_name | No | Specific service (optional — checks all if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the concrete check performed (readiness of backends) which is a real behavioral trait, but leaves unstated whether it returns a list versus an error, severity classification, and whether it is cluster-wide or namespace-scoped by default.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the core action front-loaded followed by the specific detection condition. Zero filler; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only diagnostic with fully documented params, the description covers the core intent. With no annotations and no output schema, it should still say what a result looks like (per-service readiness status, list of unhealthy services) to be complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds nothing about the parameters — it does not mention the namespace default or the all-services-when-omitted behavior. Since the schema already documents both, the description neither compensates nor adds meaning; slightly below baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("check service endpoints") and sharpens it with the exact condition detected: services with no ready backends. It is clearly distinct from siblings like find_orphaned_services or trace_service_to_pods, though it never explicitly names a sibling to contrast with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the stated failure mode (detecting zero-ready-backend services), so an agent can infer when the tool matters. However, there is no explicit when-to-use/when-not-to-use guidance and no routing to the closely related trace_service_to_pods or get_namespace_health.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_service_mesh_configB
Inspect Istio/Linkerd mesh config — VirtualServices, mTLS mode, sidecar injection status
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | Namespace (default: "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Inspect' implies a read-only operation, but it doesn't disclose permission requirements, whether it fails or returns empty when Istio/Linkerd isn't installed, or whether the scan is limited to the given namespace or cluster-wide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the resource and the enumerated inspection targets front-loaded, and zero filler. Nothing in it needs to be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only diagnostic with a single optional parameter, the description names what is inspected, which partially compensates for the missing output schema. However, it omits scope-of-namespace behavior, prerequisites (mesh must be installed), and any indication of the result shape beyond the category names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents the single namespace parameter and its default. The description adds nothing about scope (namespace-only vs. all namespaces) or how the namespace affects the results, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Inspect) and a specific resource (Istio/Linkerd mesh config), then enumerates the concrete subject matter: VirtualServices, mTLS mode, and sidecar injection status. No sibling tool touches service-mesh configuration, so an agent can select this unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites, and no alternatives or exclusions. An agent must infer from the domain that this is the diagnostic tool for mesh-related questions rather than, say, general networking (analyze_network_policy, inspect_ingress_routing).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coredns_health_checkA
Quick CoreDNS health check — pod status, replica count, restart rate
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses what the check inspects (pod status, replica count, restart rate), but it does not state whether the operation is read-only, what permissions are required, or how failures are surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that identifies the operation and enumerates the key signals checked. Every phrase contributes useful information with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter health-check tool with no output schema, the description adequately explains the conceptual return values (pod status, replica count, restart rate). It could be more complete by clarifying what constitutes a healthy versus unhealthy result or confirming the read-only nature of the check.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline score is 4. The description adds no parameter detail, but none is needed for a no-argument health check.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('health check') and resource ('CoreDNS'), and lists the concrete signals it reports: pod status, replica count, and restart rate. It does not explicitly differentiate itself from sibling tools such as debug_dns_config or list_pods, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Quick CoreDNS health check' implies the tool is for a fast health assessment, but there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives like debug_dns_config or list_pods. Usage is therefore implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
correlate_alerts_with_k8sC
Correlate Dynatrace alerts with Kubernetes events in a time window
| Name | Required | Description | Default |
|---|---|---|---|
| time_to | No | End time (default: now) | |
| namespace | No | Kubernetes namespace (optional) | |
| time_from | No | Start time (default: now-1h) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether the operation is read-only, how the correlation is computed (time proximity? label matching? namespace scoping?), what happens with an empty window, or how costly/heavy the query is across two backends.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the resource pairing and scope come first. It is efficient but so terse that it borders on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a cross-system correlation tool with no annotations and no output schema, the definition should explain what the correlated result looks like (paired alerts and events? a timeline? confidence scores?) and how namespace scoping affects matching. None of that is present, leaving an agent unable to predict the return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so defaults for time_from (now-1h) and time_to (now) and the optional namespace are already documented. The description's 'in a time window' adds only a light framing and no format or syntax detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (correlate) plus two named resources (Dynatrace alerts, Kubernetes events) and a scope (time window). It is clearly distinct from single-source siblings like get_dynatrace_problems or get_namespace_events, though it never names those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this over the sibling tools it overlaps with (get_dynatrace_problems + get_namespace_events), no prerequisites (does it require both Dynatrace and cluster access?), and no exclusions. Only the phrase 'in a time window' hints at suitable scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_dns_configB
Debug DNS — checks CoreDNS health, Corefile config, and pod DNS policy
| Name | Required | Description | Default |
|---|---|---|---|
| pod_name | No | Pod to check DNS policy (optional) | |
| namespace | No | Namespace (default: "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Debug' and 'checks' imply a read-only diagnostic operation, and the enumerated checks give real scope information, but the text says nothing about permissions required, whether the checks are safe to run in production, what happens when pod_name is omitted, or what the result looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the three checks are listed compactly. It is efficient but so compressed that no guidance or behavior could be included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must carry the definition, and it covers the scope of checks but not the return shape, permissions, or the difference between the optional pod-level path and the cluster-level CoreDNS path. Adequate but with clear gaps for a two-mode tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both optional parameters, so the schema already explains pod_name and namespace including the default. The description adds no additional semantics, such as what the pod_name check reports beyond policy, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb ('Debug') with a resource ('DNS') and enumerates the three concrete checks: CoreDNS health, Corefile config, and pod DNS policy. However, it does not differentiate itself from the sibling coredns_health_check, which appears to cover an overlapping portion of the same scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus coredns_health_check, check_service_endpoints, or trace_service_to_pods, nor any exclusion or prerequisite. The only usage hint is what the name implies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_deploymentB
Describe a deployment with full container specs and rollout conditions
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Deployment name | |
| namespace | No | Namespace (default: "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. "Describe" implies a read-only inspection and the phrase "full container specs and rollout conditions" usefully previews the payload, but nothing is said about permissions, error behavior for missing deployments, or how much detail is truncated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the return scope follows immediately after the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool this is close to adequate, and it gestures at the return content. With no output schema and no annotations, however, the agent still lacks any statement of the response shape or failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (name, namespace with default) are documented in the schema. The description adds no semantics beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Describe a deployment") and adds the scope of what is returned (container specs, rollout conditions). It is readable against the sibling list_deployments without consulting either schema, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no preconditions, and no routing to alternatives such as list_deployments or describe_pod. The only signal is the implicit describe-vs-list contrast carried by the names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_podB
Full pod description including DNS policy, network config, containers, and conditions
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Pod name | |
| namespace | No | Namespace (default: "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does disclose the returned content (DNS policy, network config, containers, conditions), which tells the agent this is a read that produces a large structured payload. It does not mention behavior on a missing pod, whether the read requires permissions, or how verbose the output is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short phrase, front-loaded with the key scope ('Full pod description') and then the notable included sections. It is efficient, though the fragmentary noun-phrase form lacks an explicit verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with full schema coverage and no output schema, the description adequately conveys what comes back. It leaves gaps around error behavior and output size, which matter for a 'full description' call that can return a large object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'name' and 'namespace' documented including the default value, so the schema does the heavy lifting. The description adds no further meaning about scoping, name format, or cross-namespace lookup, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'Full pod description' names a specific resource and signals a detailed single-object read, which is distinguishable from list_pods and get_pod_logs in the sibling set. It stops short of explicitly contrasting with those siblings, but the verb+resource intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this instead of list_pods, get_pod_logs, or describe_deployment, nor any prerequisite or exclusion. An agent must infer the selection criteria from the sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_orphaned_servicesB
Find services whose label selectors match no running pods
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | Namespace (default: "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the meaningful semantic that matching is selector-based against *running* pods (so a service with only pending/crashed pods counts as orphaned), but it says nothing about read-only behaviour, cluster-wide vs per-namespace scope, or what the result looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and the discriminating condition, with no filler. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool this is close to sufficient, but with no output schema the description never indicates what comes back (service names? namespaces? selector details?) or that the operation is non-mutating, leaving the agent to guess at the response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single optional `namespace` parameter, and the description adds nothing about it. Baseline 3 applies; the description neither clarifies default scoping nor whether omitting the parameter aggregates across namespaces beyond the schema's 'default' note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus the exact detection criterion: services whose label selectors match no running pods. That distinguishes it from the neighbouring check_service_endpoints (endpoint-based) and trace_service_to_pods (selector-to-pod tracing), though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no 'use this when...' framing, no exclusions, and no reference to any of the 18 sibling tools. The agent must infer that this is a diagnostic for services that shouldn't receive traffic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dynatrace_problemsB
Fetch Dynatrace Davis AI problems, optionally filtered by Kubernetes namespace
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Problem status (default: OPEN) | |
| namespace | No | K8s namespace to filter problems (optional) | |
| time_from | No | Time range start (default: now-2h) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, and it only implies read-only behavior through the verb 'Fetch'. It says nothing about tenant/auth requirements, rate limits, pagination, or what a returned 'problem' contains, leaving real behavioral questions unanswered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, though the terseness comes at the cost of the behavioral detail the tool needs given it has no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter, all-optional read tool with full schema coverage and no output schema, the description is marginally adequate, but it leaves the return shape and tenant/auth assumptions unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three optional parameters are already documented in the schema, and the description only reiterates the namespace filter. It adds no interpretation of the status enum values or the default time window beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch') and precise resource ('Dynatrace Davis AI problems'), which no sibling tool duplicates, so an agent can distinguish it from the Kubernetes diagnostics in the sibling list. It stops short of explicitly pointing away from the closest relative, correlate_alerts_with_k8s.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'optionally filtered by Kubernetes namespace' implies the intended Kubernetes troubleshooting context, but the description never states when to prefer this over correlate_alerts_with_k8s or get_entity_health, nor any prerequisites such as a configured Dynatrace tenant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_healthC
Get Dynatrace health metrics for a service/entity — response time, error rate
| Name | Required | Description | Default |
|---|---|---|---|
| entity_name | Yes | Entity display name in Dynatrace | |
| entity_type | No | Entity type (default: SERVICE). Options: SERVICE, PROCESS_GROUP, CLOUD_APPLICATION |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It reveals that data comes from Dynatrace and names two metrics, but says nothing about required credentials/connectivity, time window defaults, behavior when the entity name isn't found, or how many entities a name may match.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the resource and metric examples front-loaded; nothing is wasted, though it is terse to the point of leaving gaps handled in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description covers purpose and two sample metrics but omits return shape, time range, and failure modes. Adequate as a minimum viable definition, not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both entity_name and entity_type documented and entity_type's allowed values enumerated in the schema. The description adds little beyond confirming the 'service/entity' scope; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') plus a specific resource ('Dynatrace health metrics') and names the concrete metrics returned (response time, error rate). It does not differentiate from the closely related sibling get_dynatrace_problems, so an agent must guess which Dynatrace tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus get_dynatrace_problems or the Kubernetes-level health tools (get_namespace_health, check_service_endpoints). No prerequisites, no exclusions, no alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_namespace_eventsB
Get Kubernetes events filtered by type or reason — great for spotting OOMKills, BackOffs
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max events (default: 50) | |
| reason | No | Filter by reason e.g. "OOMKilling", "BackOff", "Failed" | |
| namespace | No | Namespace (default: "default") | |
| event_type | No | Filter by event type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'Get' implies a read, but nothing states that events are namespaced-only (no cluster-wide option), whether there is a time window or sort order on results, or how large result sets behave beyond the limit param. For a zero-annotation tool this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, zero waste, with the capability and the motivating use case front-loaded. It stops just short of being too terse to be actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All params are optional and fully documented in schema, and there is no output schema to explain. However, the description omits that results are scoped to a single namespace (defaulting to 'default'), which materially affects how an agent calls it across a cluster.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description's mention of filtering by type or reason aligns with the event_type/reason params without adding format or interaction detail. Baseline 3 is appropriate when the schema already documents all four parameters including defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Get Kubernetes events' with the filtering dimension (type/reason) named inline. No sibling tool covers events, so differentiation is implicit but the scope is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Great for spotting OOMKills, BackOffs' implies a diagnostic use case, which gives the agent a hint about when this is the right call. But there is no explicit when-not guidance, no mention of how it relates to get_namespace_health or describe_pod for the same troubleshooting flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_namespace_healthB
Health score rollup for a namespace — pod counts, warnings, overall status
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | Namespace (default: "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the return shape (pod counts, warnings, overall status) and the read-only nature is implied by 'get', but nothing is said about how the 'health score' is computed, what counts as a warning, or whether this is a live query versus a cached rollup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tightly packed sentence with the resource and result contents front-loaded and zero filler. It is arguably too terse rather than padded, so it scores well on economy but leaves gaps elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description should explain what the returned health score and warnings mean. It lists the components but not their semantics or scale, so an agent knows roughly what comes back but not how to interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single optional parameter with 100% schema coverage, including the default of "default". The description adds nothing beyond the schema, which is acceptable at this coverage level but earns no bonus.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('health score rollup for a namespace') and says what the result contains (pod counts, warnings, overall status). It clearly differs in kind from sibling list/describe tools by virtue of being an aggregate, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the at-a-glance check for a namespace. There is no explicit when-to-use, no when-not-to-use, and no routing versus close siblings like get_namespace_events, get_entity_health, or list_pods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pod_logsB
Fetch logs from a pod container with optional tail line limit
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Pod name | |
| container | No | Container name (optional for multi-container pods) | |
| namespace | No | Namespace (default: "default") | |
| tail_lines | No | Lines from end to return (default: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read operation and mentions tailing, but says nothing about whether logs are current-only or previous-container logs, streaming behavior, permissions, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. The core action and optional limit are immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema is fully documented and there is no output schema to explain, so the description is minimally adequate. However, with no annotations and no output schema, it should do more to explain log-fetching behavior and when this tool is preferred over pod-description siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema. The description adds only the idea of a tail line limit, which is already covered by the schema's tail_lines parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fetch logs from a pod container') and mentions the optional tail limit. It is clear what the tool does, but it does not explicitly distinguish itself from siblings such as describe_pod or list_pods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives like describe_pod for pod state versus logs. Usage is only implied by the verb 'Fetch'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_ingress_routingB
Validate ingress routing — IngressClass existence, backend service endpoints
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | Namespace (default: "default") | |
| ingress_name | No | Specific ingress (optional — checks all if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the safety profile, and 'validate'/'inspect' plus the concrete check list reasonably implies a non-mutating diagnostic. However, it does not state whether it fails or reports on a missing IngressClass, what the result shape is, or whether cluster-wide read permissions are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded line that names the verb first and then the two checks; there is no filler. Size is proportionate to a two-optional-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter diagnostic with no output schema, the description covers what is checked but not how to interpret a failure or how results relate to the endpoint-checking sibling. Minimal viable, with a clear gap around outcome semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both parameters (namespace with a stated default, optional ingress_name) are fully documented in the schema. The description adds no syntax or scoping detail beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validate) and resource (ingress routing) and enumerates the two concrete checks performed: IngressClass existence and backend service endpoints. This distinguishes it from most siblings, though it does not explicitly separate itself from the overlapping check_service_endpoints.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives, despite siblings like check_service_endpoints and analyze_network_policy covering adjacent ground. The prerequisite context (e.g., 'use when an Ingress returns 503') is left entirely for the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deploymentsB
List deployments with replica counts and conditions
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | Namespace (default: "default") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; it does disclose the shape of the return data (replica counts and conditions), which is real added value. It never states that the operation is read-only, what happens for a nonexistent namespace, or whether results are limited to one namespace, leaving behavioral gaps for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or redundancy. It is efficient, though its brevity leaves room for one more clause of routing or scope guidance without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description must cover return semantics, and it partially does (replica counts and conditions). It is still thin on namespacing behavior and failure modes for a Kubernetes listing tool, leaving an agent with unanswered questions before invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single namespace parameter (including its "default" default) is already fully documented in the schema. The description adds no meaning beyond that—for example, whether omitting namespace could ever mean all namespaces—so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("List deployments") and adds what the response contains ("replica counts and conditions"), which goes beyond the name alone. It does not distinguish itself from the close sibling describe_deployment, so an agent must infer that this is the summary-list variant rather than the detailed one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb "List" and the sibling name "describe_deployment"; nothing states when to prefer this over a detailed describe or over list_pods. No exclusions, prerequisites, or alternative routing are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_podsB
List pods in a namespace with status, readiness, and restart counts
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | Kubernetes namespace (default: "default") | |
| label_selector | No | Label selector filter e.g. "app=nginx" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden, and it does add useful disclosure about what the response contains (status, readiness, restart counts) which substitutes for a missing output schema. However, it says nothing about default namespace behavior when the param is omitted, pagination/limits, or whether the call is scoped to all namespaces.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the resource, the scope, and the returned fields with zero filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only list tool with a fully documented schema, the description covers purpose, scope, and return content. The only real gap is behavior when namespace is omitted or whether label_selector is echoed, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters fully documented in the schema (namespace default "default", label_selector example). The description adds only that results are namespace-scoped and never mentions label filtering, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (list pods) plus scope (namespace) and the fields surfaced (status, readiness, restart counts). This distinguishes it from get_pod_logs and describe_pod reasonably well, though it never explicitly contrasts itself with describe_pod, which also targets pods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives, despite siblings like describe_pod (single-pod detail) and list_deployments. An agent must infer that this is the 'many pods, summary view' tool from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
node_network_statusA
Check network status of all nodes — NetworkUnavailable conditions, PodCIDR allocations
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full disclosure burden. It does reveal cluster-wide scope ('all nodes') and what signals are examined, but says nothing about read-only safety, permissions required, whether it contacts a live cluster, or failure behavior for unreachable nodes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action first and the inspected signals after the dash. Zero filler, nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read tool this is nearly sufficient: it tells the agent what is checked and over what scope. The only real gap is that with no output schema, the agent cannot predict the response shape or whether per-node results are aggregated or listed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline 4 case — there is no parameter semantics to explain and the empty schema is consistent with a cluster-wide status sweep. Nothing in the description contradicts that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource (check network status of all nodes) and enumerates the two things inspected: NetworkUnavailable conditions and PodCIDR allocations. That clearly separates it from the pod-, service-, DNS- and policy-focused siblings, though it never explicitly names a sibling it contrasts with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — an agent can infer it belongs in node-level network troubleshooting, but there is no explicit when-to-use, no statement of when to prefer analyze_network_policy, debug_dns_config, or check_service_endpoints instead, and no prerequisites noted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_service_to_podsB
Trace full path: Service → EndpointSlices → Pods → NetworkPolicies
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | Namespace (default: "default") | |
| service_name | Yes | Service name to trace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not state whether this is read-only, whether it requires permissions, how expensive the trace is, or what the output looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste. The path chain is compact and immediately readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should at least explain the return shape or the behavioral profile of the trace. It only states what path is followed, leaving the agent uncertain about output and side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description adds no additional meaning about service_name or namespace beyond what the schema provides, which is the baseline expectation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (trace a Service) and enumerates the exact path traversed: Service → EndpointSlices → Pods → NetworkPolicies. This distinguishes it reasonably well from siblings like check_service_endpoints, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Trace full path' and the chain of resources, suggesting debugging connectivity across endpoints, pods, and network policies. However, there is no explicit guidance on when to choose this over check_service_endpoints or analyze_network_policy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
19 tool updates
v0.1.0- First observed
analyze_network_policy - First observed
check_service_endpoints - First observed
check_service_mesh_config - First observed
coredns_health_check - First observed
correlate_alerts_with_k8s - First observed
debug_dns_config - First observed
describe_deployment - First observed
describe_pod - First observed
find_orphaned_services - First observed
get_dynatrace_problems - First observed
get_entity_health - First observed
get_namespace_events - First observed
get_namespace_health - First observed
get_pod_logs - First observed
inspect_ingress_routing - First observed
list_deployments - First observed
list_pods - First observed
node_network_status - First observed
trace_service_to_pods
TDQS
Scored across 19 tools
Most tools target a distinct resource+action (list_pods vs describe_pod vs get_pod_logs, namespace events vs namespace health), so selection is generally clear. The main overlap is between debug_dns_config and coredns_health_check, which both cover CoreDNS pod health and could be confused, and the service trio (find_orphaned_services, check_service_endpoints, trace_service_to_pods) sits close together though descriptions differentiate them.
17 of 19 tools follow a verb_noun pattern (list_pods, get_pod_logs, describe_deployment, check_service_endpoints, trace_service_to_pods). Only coredns_health_check and node_network_status break the pattern with noun-first phrasing, a minor deviation that stays readable.
19 tools covers a genuinely broad surface (pods, deployments, events, DNS, network policy, ingress, mesh, Dynatrace), so each largely earns its place. It sits at the heavy end of the comfortable range, and the near-duplicate CoreDNS pair is the one spot that looks like padding.
The observability/network-debugging niche is well covered: pods, deployments, logs, events, health rollups, DNS, ingress, mesh, and Dynatrace correlation. Noticeable gaps are a plain list_services, basic node listing beyond node_network_status, and resource-usage metrics (CPU/memory) that agents would expect from an observability server, though most are workable around via describe commands.
Maintenance
Related MCP Connectors
The Google GKE MCP server is a managed Model Context Protocol server that provides AI applications with tools to manage Google Kubernetes Engine (GKE) clusters and Kubernetes resources. It exposes a structured, discoverable interface that allows AI agents to interact with GKE and Kubernetes APIs, enabling them to inspect cluster configurations, retrieve Kubernetes resource YAMLs, monitor operations like cluster upgrades, diagnose issues, and optimize costs—all without needing to parse text output or use complex kubectl commands.
MCP server for building and testing AI agents with multi-model experimentation and insights.
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI assistants to interact with Kubernetes clusters by translating natural language into kubectl and Helm operations. It allows users to query, manage, and diagnose Kubernetes resources and cluster states through a seamless integration.20Apache 2.0
- AlicenseNot gradedqualityDmaintenanceAn MCP server that lets AI assistants safely inspect and operate on Kubernetes clusters through natural conversation.18 PyPIMIT
- AlicenseNot gradedqualityCmaintenanceAn open source MCP server empowering SREs with intelligent observability, predictive analytics, and AI-driven automation across Kubernetes, OpenShift, and Tekton environments.35 PyPI11Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA powerful Model Context Protocol (MCP) server that provides AI assistants with comprehensive access to Dynatrace's observability platform. Features dual authentication architecture, Davis CoPilot AI integration, and 24 specialized tools for monitoring, automation, and operational intelligence.7 npm5MIT