Skip to main content
Glama
BenedatLLC

Kubernetes Tools MCP Server

by BenedatLLC

get_deployment_summaries

Retrieve deployment summaries from Kubernetes clusters to monitor replica status and availability across namespaces.

Instructions

Retrieves a list of DeploymentSummary objects for deployments in a given namespace or all namespaces.
Similar to `kubectl get deployements`.

Parameters
----------
namespace : Optional[str], default=None
    The specific namespace to list deployments from. If None, lists deployments from all namespaces.

Returns
-------
list of DeploymentSummary
    A list of DeploymentSummary objects, each providing a summary of a deployment's status with the following fields:

    name : str
        Name of the deployment.
    namespace : str
        Namespace in which the deployment is running.
    total_replicas : int
        Total number of replicas desired for this deployment.
    ready_replicas : int
        Number of replicas that are currently ready.
    up_to_date_replicas : int
        Number of replicas that are up to date.
    available_replicas : int
        Number of replicas that are available.
    age : datetime.timedelta
        Age of the deployment (current time minus creation timestamp).

Raises
------
K8sConfigError
    If unable to initialize the K8S API.
K8sApiError
    If the API call to list deployments fails.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
namespaceNo

Implementation Reference

  • Main tool handler: Queries Kubernetes AppsV1Api for deployments (namespaced or all), extracts summary fields like replicas and age, constructs DeploymentSummary pydantic models, returns list. Handles API init and errors.
    def get_deployment_summaries(namespace: Optional[str] = None) -> list[DeploymentSummary]:
        """
        Retrieves a list of DeploymentSummary objects for deployments in a given namespace or all namespaces.
        Similar to `kubectl get deployements`.
    
        Parameters
        ----------
        namespace : Optional[str], default=None
            The specific namespace to list deployments from. If None, lists deployments from all namespaces.
    
        Returns
        -------
        list of DeploymentSummary
            A list of DeploymentSummary objects, each providing a summary of a deployment's status with the following fields:
    
            name : str
                Name of the deployment.
            namespace : str
                Namespace in which the deployment is running.
            total_replicas : int
                Total number of replicas desired for this deployment.
            ready_replicas : int
                Number of replicas that are currently ready.
            up_to_date_replicas : int
                Number of replicas that are up to date.
            available_replicas : int
                Number of replicas that are available.
            age : datetime.timedelta
                Age of the deployment (current time minus creation timestamp).
    
        Raises
        ------
        K8sConfigError
            If unable to initialize the K8S API.
        K8sApiError
            If the API call to list deployments fails.
        """
        global APPS_V1_API
        
        # Load Kubernetes configuration and initialize client only once
        if APPS_V1_API is None:
            APPS_V1_API = _get_apps_v1_api_client()
    
        logging.info(f"get_deployment_summaries(namespace={namespace})")
        deployment_summaries: list[DeploymentSummary] = []
        
        try:
            if namespace:
                deployments = APPS_V1_API.list_namespaced_deployment(namespace=namespace)
            else:
                deployments = APPS_V1_API.list_deployment_for_all_namespaces()
        except client.ApiException as e:
            raise K8sApiError(f"Error fetching deployments: {e}") from e
        
        current_time_utc = datetime.datetime.now(datetime.timezone.utc)
        
        for deployment in deployments.items:
            deployment_name = deployment.metadata.name
            deployment_namespace = deployment.metadata.namespace
            
            # Extract replica counts from deployment status
            total_replicas = deployment.spec.replicas if deployment.spec.replicas is not None else 0
            ready_replicas = deployment.status.ready_replicas if deployment.status.ready_replicas is not None else 0
            up_to_date_replicas = deployment.status.updated_replicas if deployment.status.updated_replicas is not None else 0
            available_replicas = deployment.status.available_replicas if deployment.status.available_replicas is not None else 0
            
            # Calculate age
            age = datetime.timedelta(0)  # Default to 0 if creation_timestamp is missing
            if deployment.metadata.creation_timestamp:
                age = current_time_utc - deployment.metadata.creation_timestamp
            
            deployment_summary = DeploymentSummary(
                name=deployment_name,
                namespace=deployment_namespace,
                total_replicas=total_replicas,
                ready_replicas=ready_replicas,
                up_to_date_relicas=up_to_date_replicas,
                available_replicas=available_replicas,
                age=age
            )
            deployment_summaries.append(deployment_summary)
        
        return deployment_summaries
  • Pydantic model defining the output schema for deployment summaries, matching kubectl get deployments output fields.
    class DeploymentSummary(BaseModel):
        """A summary of a deployment's status like returned by `kubectl get deployments`"""
        name: str
        namespace: str
        total_replicas: int
        ready_replicas: int
        up_to_date_relicas: int
        available_replicas: int
        age: datetime.timedelta
  • Exported TOOLS list including get_deployment_summaries, imported by mcp_server for tool registration.
    TOOLS = [
        get_namespaces,
        get_node_summaries,
        get_pod_summaries,
        get_pod_container_statuses,
        get_pod_events,
        get_pod_spec,
        get_logs_for_pod_and_container,
        get_deployment_summaries,
        get_service_summaries
    ]
  • Server code that imports TOOLS list and wraps each function (including get_deployment_summaries) into FastMCP Tool objects using Tool.from_function with structured_output=True.
    if not args.mock:
        from .k8s_tools import TOOLS
    else:
        from .mock_tools import TOOLS
        logging.warning(f"Using mock versions of the tools")
    wrapped_tools = [get_tool_for_function(fn) for fn in TOOLS]
  • Mock implementation of the tool for testing, returns static data filtered by namespace, copies docstring from real handler.
    def get_deployment_summaries(namespace: Optional[str] = None) -> list[k8s_tools.DeploymentSummary]:
        """Mock implementation that returns static deployment data, filtered by namespace if specified"""
        deployments = _MOCK_DATA['deployments']
        
        if namespace is not None:
            return [deployment for deployment in deployments if deployment.namespace == namespace]
        return deployments
    
    get_deployment_summaries.__doc__ = k8s_tools.get_deployment_summaries.__doc__

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/BenedatLLC/k8stools'

If you have feedback or need assistance with the MCP directory API, please join our Discord server