skypilot-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SKYPILOT_API_SERVER_ENDPOINT | No | Endpoint URL for a remote SkyPilot API server |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| skypilot_api_infoA | Get SkyPilot API server information including health status, version, commit hash, and authentication details. |
| skypilot_api_statusA | List pending and running API requests. Optionally filter by specific request_ids, cluster_name, or fields. Set all_status=True to include finished requests. Use limit to cap the number of results. |
| skypilot_api_cancelB | Cancel pending API requests. Specify request_ids to cancel specific requests. Returns a request_id for the cancel operation itself. |
| skypilot_get_requestA | Wait for a SkyPilot request to complete and return its result. Use this after calling tools that return a request_id (e.g., skypilot_cluster_launch, skypilot_cluster_stop, etc.). This call blocks until the request finishes. |
| skypilot_stream_and_getA | Wait for a SkyPilot request to complete while capturing its log output. Unlike skypilot_get_request (which only returns the final result), this also returns the streaming logs produced during execution — useful for long-running operations like launch, exec, or managed job launch. Returns a JSON object with 'result' and 'logs' fields. Set tail to limit how many trailing log lines are captured (default: all). Set follow=False to return immediately with whatever logs are available. Use log_path instead of request_id to stream from a specific log file on the API server. |
| skypilot_api_startA | Start the SkyPilot API server. Set deploy=True for deployment mode (fully utilizes resources). Optionally enable metrics collection and basic auth. Note: foreground mode is not supported via MCP as it would block the server permanently. |
| skypilot_api_stopA | Stop the SkyPilot API server. Only works for locally hosted API servers. Will raise an error for remote API servers. |
| skypilot_api_server_logsB | Get SkyPilot API server logs. Returns a snapshot of the server log output. Set tail to limit the number of lines returned. |
| skypilot_api_loginB | Log in to a remote SkyPilot API server. Sets the endpoint globally so all subsequent SkyPilot calls use it. Set relogin=True to force re-authentication with OAuth2. |
| skypilot_api_logoutA | Log out of the remote SkyPilot API server. Clears all cookies and settings. Only works for remote API servers. |
| skypilot_cluster_statusA | Get the status of SkyPilot clusters. Returns cluster names, statuses, resource types, autostop settings, and more. If no cluster_names provided, returns all clusters. Set refresh to 'NONE' (default, no refresh), 'AUTO' (refresh only clusters with autostop or spot instances), or 'FORCE' (refresh all). |
| skypilot_cluster_launchB | Launch a new cluster or submit a task to an existing cluster. Accepts a SkyPilot task YAML string defining resources, setup, and run commands. Set optimize_target to 'COST' (default) or 'TIME'. Set fast=True to skip cloud availability checks for faster provisioning. Set wait_for to control autostop idle detection: 'jobs_and_ssh' (default), 'jobs', or 'none'. Returns a request_id — use skypilot_get_request to poll for the result. |
| skypilot_cluster_execA | Execute a task on an existing cluster. Syncs workdir and runs commands. Accepts a SkyPilot task YAML string. Returns a request_id — use skypilot_get_request to poll for the result. |
| skypilot_cluster_stopA | Stop a running cluster. Data on attached disks is preserved. Billing for instances stops but disk charges continue. Set graceful=True to wait for in-progress data uploads to finish before stopping (prevents data loss). Returns a request_id. |
| skypilot_cluster_startB | Restart a previously stopped cluster. Reattaches preserved disks. Set wait_for to control autostop idle detection: 'jobs_and_ssh' (default), 'jobs', or 'none'. Returns a request_id. |
| skypilot_cluster_downB | Tear down a cluster completely. All associated resources are deleted and data on attached disks is lost. Returns a request_id. |
| skypilot_cluster_autostopA | Set an autostop timer for a cluster. The cluster will automatically stop (or tear down if down=True) after being idle for the specified number of minutes. Set idle_minutes to -1 to disable. Set wait_for to control idle detection: 'jobs_and_ssh' (default), 'jobs', or 'none'. Set hook to a shell command to run on the cluster before autostop. Returns a request_id. |
| skypilot_cluster_endpointsA | Get the endpoint(s) for a cluster. Optionally filter by port number or port name. Returns a mapping of port numbers to endpoint URLs. |
| skypilot_reload_configA | Reload the SkyPilot client-side configuration from ~/.sky/config.yaml. Use after making manual changes to the config file. |
| skypilot_workspacesA | List available SkyPilot workspaces. Returns workspace names and their configurations. |
| skypilot_dashboardB | Open the SkyPilot dashboard in the default web browser. Optionally specify a starting page. |
| skypilot_jobs_dashboardA | Open the managed jobs dashboard in the default web browser. Shows a dedicated view for monitoring managed jobs. |
| skypilot_cost_reportA | Get cost reports for all clusters, including those that have been terminated. Shows estimated costs based on resource types and usage duration. Optionally filter by number of days. |
| skypilot_optimizeA | Find the best execution plan for a task. Analyzes available clouds, regions, and instance types to find the optimal placement. Set minimize to 'COST' (default) or 'TIME'. Returns the optimized DAG with the best resources selected. |
| skypilot_validateA | Validate a task configuration without launching it. Checks that file paths (workdir, file_mounts) exist locally and that the task specification is valid on the server side. Raises an error if validation fails, returns success message otherwise. |
| skypilot_checkA | Check and enable infrastructure credentials. Verifies that credentials are configured correctly for the specified infrastructure (clouds, Kubernetes, SSH, Slurm). If no infra specified, checks all supported infrastructure. Optionally specify a workspace name to scope the check to a specific workspace. |
| skypilot_enabled_cloudsA | List all clouds that have been enabled (credentials configured). Returns a list of cloud names. Set expand=True to expand Kubernetes and SSH into individual resource pools. Optionally specify a workspace name to scope the listing to a specific workspace. |
| skypilot_list_acceleratorsB | List available accelerators (GPUs/TPUs) across clouds. Filter by name, region, quantity, or specific clouds. Set gpus_only=False to include non-GPU accelerators like TPUs. Set case_sensitive=False for case-insensitive name filtering. |
| skypilot_list_accelerator_countsB | List available accelerators and their available counts. Returns a mapping of accelerator names to available quantities. Filter by name, region, quantity, or specific clouds. |
| skypilot_kubernetes_node_infoB | Get resource information for all nodes in a Kubernetes cluster. Shows CPU, memory, GPU, and other resource details per node. |
| skypilot_realtime_gpu_availabilityA | Get real-time GPU availability in a Kubernetes cluster. Shows which GPUs are currently available and their quantities. Filter by GPU name or minimum quantity. Set is_ssh to filter by SSH-based (True) or Kubernetes-based (False) infrastructure, or leave unset for all. |
| skypilot_kubernetes_label_gpusB | Label GPU nodes in a Kubernetes cluster for use with SkyPilot. Currently supports NVIDIA GPUs only. Set cleanup_only=True to remove existing labeling resources. Returns a request_id. |
| skypilot_status_kubernetesA | [Experimental] Get all SkyPilot clusters and jobs in a Kubernetes cluster. Includes managed jobs and services. Returns cluster info, managed job records, and context information. |
| skypilot_local_upA | Launch a local Kubernetes cluster for SkyPilot. Set gpus=True to enable GPU passthrough. Only works when the API server is running locally. Returns a request_id. |
| skypilot_local_downA | Tear down the local Kubernetes cluster started by local_up. Only works when the API server is running locally. Returns a request_id. |
| skypilot_ssh_upB | Deploy SSH node pools defined in ~/.sky/ssh_node_pools.yaml. Optionally specify a specific infra name or config file path. Returns a request_id. |
| skypilot_ssh_downB | Tear down Kubernetes cluster on SSH targets. Optionally specify a specific infra name. Returns a request_id. |
| skypilot_realtime_slurm_gpu_availabilityA | Get real-time GPU availability in a Slurm cluster. Shows which GPUs are currently available and their quantities. Filter by GPU name, minimum quantity, or Slurm cluster name. |
| skypilot_slurm_node_infoC | Get resource information for all nodes in a Slurm cluster. Shows node name, partition, state, GPU type, total/free GPUs, vCPU count, and memory. |
| skypilot_job_queueB | List jobs on a cluster's job queue. Returns job IDs, names, statuses, submission times, and resource usage. |
| skypilot_job_statusA | Get the status of specific jobs on a cluster. If no job_ids provided, returns the status of the latest job. |
| skypilot_job_cancelA | Cancel jobs on a cluster. Provide either job_ids to cancel specific jobs, or set cancel_all=True to cancel all jobs (mutually exclusive). Set all_users=True to cancel jobs from all users. Returns a request_id. |
| skypilot_job_logsA | Get a snapshot of logs from a job running on a cluster. Returns the last N lines (default 100, set to 0 for all). Does not stream/follow logs. If no job_id is provided, returns logs for the latest job. |
| skypilot_download_logsB | Download job logs from a cluster to a local directory. Returns a mapping of job IDs to local log file paths. |
| skypilot_managed_job_download_logsB | Download logs from a managed job to a local directory. Specify by name or job_id. Set controller=True to download controller logs instead of job logs. Optionally specify local_dir to control where logs are saved. |
| skypilot_serve_download_logsA | Download service logs to a local directory. Optionally filter by targets ('controller', 'load_balancer', 'replica') and replica_ids. |
| skypilot_pool_download_logsB | Download worker pool logs to a local directory. Optionally filter by targets ('controller', 'load_balancer', 'replica') and worker_ids. |
| skypilot_tail_provision_logsA | Get provisioning logs (provision.log) for a cluster. Shows the log output from when the cluster was being provisioned. Optionally specify a worker node index for multi-node clusters. Returns the last N lines (default 100, set to 0 for all). |
| skypilot_tail_autostop_logsB | Get autostop hook logs (autostop_hook.log) for a cluster. Shows the log output from the autostop hook. Returns the last N lines (default 100, set to 0 for all). |
| skypilot_managed_job_launchA | Launch a managed job with automatic recovery from spot preemptions and hardware failures. Accepts a SkyPilot task YAML string (single task or multi-document YAML for job groups with parallel execution). Set pool to target a specific worker pool. Set num_jobs to launch multiple copies of the same job. Returns a request_id. |
| skypilot_managed_job_queueB | List managed jobs and their statuses (v2 API). Returns job IDs, names, statuses, submission times, recovery information, total count, and status counts. Set refresh=True to fetch the latest state from the cluster (slower but up-to-date). Supports sorting and pagination via limit, sort_by, and sort_order parameters. |
| skypilot_managed_job_queue_v1A | List managed jobs and their statuses (v1 API). Returns a flat list of job records without pagination or sorting support. Use this for compatibility with older API servers or when the simpler return format is preferred. Set refresh=True to fetch the latest state from the cluster. |
| skypilot_managed_job_cancelA | Cancel managed jobs. Provide exactly one of: name, job_ids, cancel_all=True, or pool (mutually exclusive). Set all_users=True to cancel jobs from all users. Set graceful=True to wait for in-progress data uploads before cancelling. Returns a request_id. |
| skypilot_managed_job_logsA | Get a snapshot of logs from a managed job. Returns the last N lines (default 100, set to 0 for all). Does not stream/follow. Specify by name or job_id. Set controller=True to view the jobs controller logs instead. Set task to view logs for a specific task in a JobGroup (task name or 0-based index). |
| skypilot_pool_applyA | Create or update a worker pool. A worker pool is a long-lived set of compute resources that can host multiple managed jobs. Accepts a SkyPilot task YAML string defining the pool's resources. Set mode to 'rolling' (default) or 'blue_green' for the update strategy. Returns a request_id. |
| skypilot_pool_statusA | Get the status of worker pools. Returns pool names, worker counts, statuses, and resource information. If no pool_names provided, returns all pools. |
| skypilot_pool_downA | Delete worker pool(s). Specify pool_names or set delete_all=True. Set purge=True to force deletion even with errors. Returns a request_id. |
| skypilot_pool_logsA | Get a snapshot of logs from a worker pool. Target can be 'controller', 'load_balancer', or 'replica'. Optionally specify a worker_id. Returns the last N lines (default 100, set to 0 for all). Does not stream/follow. |
| skypilot_serve_upB | Launch a new service. Accepts a SkyPilot task YAML string with a service section defining replicas, readiness probe, etc. Returns a request_id. |
| skypilot_serve_updateB | Update an existing service with a new task configuration. Set mode to 'rolling' (default) or 'blue_green'. Returns a request_id. |
| skypilot_serve_downA | Tear down service(s). Specify service_names or set delete_all=True. Set purge=True to force deletion even with errors. Returns a request_id. |
| skypilot_serve_statusA | Get the status of services. Returns service names, statuses, replica counts, endpoint URLs, and more. If no service_names provided, returns all services. |
| skypilot_serve_logsA | Get a snapshot of logs from a service component. Target can be 'controller', 'load_balancer', or 'replica'. When target is 'replica', optionally specify replica_id. Returns the last N lines (default 100, set to 0 for all). Does not stream/follow. |
| skypilot_serve_terminate_replicaA | Terminate a specific replica of a service. Set purge=True to force termination even with errors. Returns a request_id. |
| skypilot_storage_lsA | List all SkyPilot-managed storage objects (cloud buckets). |
| skypilot_storage_deleteB | Delete a SkyPilot-managed storage object (cloud bucket). Returns a request_id. |
| skypilot_volume_applyA | Create or register a volume. Accepts a volume configuration as a JSON/dict with fields: name, type ('k8s-pvc' or 'runpod-network-volume'), size (e.g. '100GB'), and optional fields like infra, labels, use_existing, config. Returns a request_id. |
| skypilot_volume_lsA | List all volumes. Set refresh=True to refresh volume state from cloud APIs before returning (slower but most up-to-date). |
| skypilot_volume_deleteA | Delete one or more volumes by name. Set purge=True to force deletion from the database even if the cloud deletion fails. Returns a request_id. |
| skypilot_volume_validateB | Validate a volume configuration without creating it. Checks that the volume specification is valid on the server side. Raises an error if validation fails, returns success otherwise. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 70 tools
Most tools are well-scoped by action+resource, but several near-duplicates exist: skypilot_managed_job_logs vs skypilot_managed_job_download_logs, skypilot_serve_logs vs skypilot_serve_download_logs, skypilot_pool_logs vs skypilot_pool_download_logs, and the v1/v2 managed_job_queue variants. An agent must read descriptions closely to pick the right 'get logs' vs 'download logs' tool.
Strong, predictable prefix_service_action pattern throughout (e.g. skypilot_cluster_launch, skypilot_serve_up, skypilot_volume_delete). Minor inconsistencies like skypilot_workspaces (no action verb), skypilot_dashboard, and skypilot_optimize/validate/check lacking a clear resource prefix slightly break the pattern.
70 tools is far too many for coherent agent selection. While SkyPilot's surface is genuinely broad (clusters, jobs, managed jobs, services, pools, volumes, storage, kubernetes, ssh, slurm), this exceeds a workable tool count and forces many overlapping variants.
Coverage is extensive across the SkyPilot domain: full cluster lifecycle, managed jobs, services, pools, volumes, storage, and infra checks. Minor gaps like cluster log streaming (only job/autostop logs) and no explicit cluster exec-cancel, but the surface is largely complete.