Skip to content

Commit fafdf9a

Browse files
committed
feat: enable initial support for logging
Closes #32
1 parent 3a49d87 commit fafdf9a

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

README.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,10 @@ npx kubernetes-mcp-server@latest --help
128128

129129
### Configuration Options
130130

131-
| Option | Description |
132-
|--------------|------------------------------------------------------------------------------------------|
133-
| `--sse-port` | Starts the MCP server in Server-Sent Event (SSE) mode and listens on the specified port. |
131+
| Option | Description |
132+
|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
133+
| `--sse-port` | Starts the MCP server in Server-Sent Event (SSE) mode and listens on the specified port. |
134+
| `--log-level` | Sets the logging level (values [from 0-9](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md)). Similar to [kubectl logging levels](https://kubernetes.io/docs/reference/kubectl/quick-reference/#kubectl-output-verbosity-and-debugging). |
134135

135136
## 🧑‍💻 Development <a id="development"></a>
136137

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ require (
1313
k8s.io/apiextensions-apiserver v0.32.3
1414
k8s.io/apimachinery v0.32.3
1515
k8s.io/client-go v0.32.3
16+
k8s.io/klog/v2 v2.130.1
1617
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
1718
sigs.k8s.io/controller-runtime v0.20.4
1819
sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20250211091558-894df3a7e664
@@ -64,7 +65,6 @@ require (
6465
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
6566
gopkg.in/inf.v0 v0.9.1 // indirect
6667
gopkg.in/yaml.v3 v3.0.1 // indirect
67-
k8s.io/klog/v2 v2.130.1 // indirect
6868
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
6969
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
7070
sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect

pkg/kubernetes-mcp-server/cmd/root.go

+21-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@ package cmd
22

33
import (
44
"errors"
5+
"flag"
56
"fmt"
67
"github.com/manusa/kubernetes-mcp-server/pkg/mcp"
78
"github.com/manusa/kubernetes-mcp-server/pkg/version"
89
"github.com/mark3labs/mcp-go/server"
910
"github.com/spf13/cobra"
1011
"github.com/spf13/viper"
1112
"golang.org/x/net/context"
13+
"k8s.io/klog/v2"
14+
"k8s.io/klog/v2/textlogger"
15+
"os"
16+
"strconv"
1217
)
1318

1419
var rootCmd = &cobra.Command{
@@ -34,6 +39,7 @@ Kubernetes Model Context Protocol (MCP) server
3439
3540
# TODO: add more examples`,
3641
Run: func(cmd *cobra.Command, args []string) {
42+
initLogging()
3743
if viper.GetBool("version") {
3844
fmt.Println(version.Version)
3945
return
@@ -47,10 +53,12 @@ Kubernetes Model Context Protocol (MCP) server
4753
var sseServer *server.SSEServer
4854
if ssePort := viper.GetInt("sse-port"); ssePort > 0 {
4955
sseServer = mcpServer.ServeSse(viper.GetString("sse-base-url"))
56+
defer func() { _ = sseServer.Shutdown(cmd.Context()) }()
57+
klog.V(0).Infof("SSE server starting on port %d", ssePort)
5058
if err := sseServer.Start(fmt.Sprintf(":%d", ssePort)); err != nil {
51-
panic(err)
59+
klog.Errorf("Failed to start SSE server: %s", err)
60+
return
5261
}
53-
defer sseServer.Shutdown(cmd.Context())
5462
}
5563
if err := mcpServer.ServeStdio(); err != nil && !errors.Is(err, context.Canceled) {
5664
panic(err)
@@ -60,6 +68,7 @@ Kubernetes Model Context Protocol (MCP) server
6068

6169
func init() {
6270
rootCmd.Flags().BoolP("version", "v", false, "Print version information and quit")
71+
rootCmd.Flags().IntP("log-level", "", 0, "Set the log level (from 0 to 9)")
6372
rootCmd.Flags().IntP("sse-port", "", 0, "Start a SSE server on the specified port")
6473
rootCmd.Flags().StringP("sse-base-url", "", "", "SSE public base URL to use when sending the endpoint message (e.g. https://example.com)")
6574
_ = viper.BindPFlags(rootCmd.Flags())
@@ -70,3 +79,13 @@ func Execute() {
7079
panic(err)
7180
}
7281
}
82+
83+
func initLogging() {
84+
logger := textlogger.NewLogger(textlogger.NewConfig(textlogger.Output(os.Stdout)))
85+
klog.SetLoggerWithOptions(logger)
86+
flagSet := flag.NewFlagSet("kubernetes-mcp-server", flag.ContinueOnError)
87+
klog.InitFlags(flagSet)
88+
if logLevel := viper.GetInt("log-level"); logLevel >= 0 {
89+
_ = flagSet.Parse([]string{"--v", strconv.Itoa(logLevel)})
90+
}
91+
}

0 commit comments

Comments
 (0)