Skip to content

Support kubectl config #94

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
jxs1211 opened this issue Apr 7, 2025 · 3 comments
Open

Support kubectl config #94

jxs1211 opened this issue Apr 7, 2025 · 3 comments

Comments

@jxs1211
Copy link
Contributor

jxs1211 commented Apr 7, 2025

I want to propose a feature for supporting kubectl config operations and would like to contribute the feature.

➜  mcp-server-kubernetes git:(main) ✗ k config --help
Modify kubeconfig files using subcommands like "kubectl config set current-context my-context"

 The loading order follows these rules:

  1.  If the --kubeconfig flag is set, then only that file is loaded. The flag may only be set once and no merging takes place.
  2.  If $KUBECONFIG environment variable is set, then it is used as a list of paths (normal path delimiting rules for your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the last file in the list.
  3.  Otherwise, ${HOME}/.kube/config is used and no merging takes place.

Available Commands:
  current-context Display the current-context
  delete-cluster  Delete the specified cluster from the kubeconfig
  delete-context  Delete the specified context from the kubeconfig
  delete-user     Delete the specified user from the kubeconfig
  get-clusters    Display clusters defined in the kubeconfig
  get-contexts    Describe one or many contexts
  get-users       Display users defined in the kubeconfig
  rename-context  Rename a context from the kubeconfig file
  set             Set an individual value in a kubeconfig file
  set-cluster     Set a cluster entry in kubeconfig
  set-context     Set a context entry in kubeconfig
  set-credentials Set a user entry in kubeconfig
  unset           Unset an individual value in a kubeconfig file
  use-context     Set the current-context in a kubeconfig file
  view            Display merged kubeconfig settings or a specified kubeconfig file

Usage:
  kubectl config SUBCOMMAND [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
@Flux159
Copy link
Owner

Flux159 commented Apr 7, 2025

This would need extensive testing and updates to https://github.com/Flux159/mcp-server-kubernetes/blob/main/src/utils/kubernetes-manager.ts to support changing the kubectl config / contexts. I think some new changeContext function would need to reset everything that is set in the constructor, then expose that to the llm via a tool. There's also probably some nuance around what state we're tracking in kubernetes-manager - if we want to properly clear things across multiple contexts.

Most tools use k8sManager.getCoreApi, etc. and we would need to make sure that those work correctly after a config or context change.

You may also face this issue, but as long as it's documented that config changes will not work with the same username due to a caching issue in the client dependency that should be fine.

@Flux159
Copy link
Owner

Flux159 commented Apr 8, 2025

As mentioned in #97 (comment) - there may be an api that supports this in the javascript client which would make it a bit easier to implement.

@Flux159
Copy link
Owner

Flux159 commented Apr 15, 2025

We now have list contexts, set context, and get context tool calls in v1.4.0.

Note that we're not supporting every kube config operation - @jxs1211 are there other operations than the ones I listed that you want to add or should this be closed?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants