mirror of
https://github.com/containers/kubernetes-mcp-server.git
synced 2025-10-23 01:22:57 +03:00
feat: mcp server tested with client
This commit is contained in:
6
Makefile
6
Makefile
@@ -7,7 +7,7 @@
|
||||
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
PACKAGE=github.com/manusa/kubernetes-mcp-server
|
||||
PACKAGE=$(shell go list -m)
|
||||
GIT_COMMIT_HASH=$(shell git rev-parse HEAD)
|
||||
GIT_VERSION=$(shell git describe --tags --always --dirty)
|
||||
BUILD_TIME=$(shell date -u '+%Y-%m-%dT%H:%M:%SZ')
|
||||
@@ -42,6 +42,10 @@ build: ## Build the project
|
||||
|
||||
CLEAN_TARGETS+='$(BINARY_NAME)'
|
||||
|
||||
.PHONY: test
|
||||
test: ## Run the tests
|
||||
go test -v ./...
|
||||
|
||||
.PHONY: tidy
|
||||
tidy: ## Tidy up the go modules
|
||||
go mod tidy
|
||||
|
||||
14
cmd/kubernetes-mcp-server/main_test.go
Normal file
14
cmd/kubernetes-mcp-server/main_test.go
Normal file
@@ -0,0 +1,14 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
)
|
||||
|
||||
//goland:noinspection GoTestName
|
||||
func ExampleVersion() {
|
||||
oldArgs := os.Args
|
||||
defer func() { os.Args = oldArgs }()
|
||||
os.Args = []string{"kubernetes-mcp-server", "--version"}
|
||||
main()
|
||||
// Output: 0.0.0
|
||||
}
|
||||
@@ -17,13 +17,18 @@ Kubernetes Model Context Protocol (MCP) server
|
||||
# show this help
|
||||
kubernetes-mcp-server -h
|
||||
|
||||
# shows version information
|
||||
kubernetes-mcp-server --version
|
||||
|
||||
# TODO: add more examples`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if viper.GetBool("version") {
|
||||
fmt.Println(version.Version)
|
||||
return
|
||||
}
|
||||
mcp.Start()
|
||||
if err := mcp.NewSever().ServeStdio(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
29
pkg/kubernetes-mcp-server/cmd/root_test.go
Normal file
29
pkg/kubernetes-mcp-server/cmd/root_test.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func captureOutput(f func() error) (string, error) {
|
||||
originalOut := os.Stdout
|
||||
defer func() {
|
||||
os.Stdout = originalOut
|
||||
}()
|
||||
r, w, _ := os.Pipe()
|
||||
os.Stdout = w
|
||||
err := f()
|
||||
_ = w.Close()
|
||||
out, _ := io.ReadAll(r)
|
||||
return string(out), err
|
||||
}
|
||||
|
||||
func TestVersion(t *testing.T) {
|
||||
rootCmd.SetArgs([]string{"--version"})
|
||||
version, err := captureOutput(rootCmd.Execute)
|
||||
if version != "0.0.0\n" {
|
||||
t.Fatalf("Expected version 0.0.0, got %s %v", version, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,11 @@ import (
|
||||
"github.com/mark3labs/mcp-go/server"
|
||||
)
|
||||
|
||||
func Start() {
|
||||
type Sever struct {
|
||||
server *server.MCPServer
|
||||
}
|
||||
|
||||
func NewSever() *Sever {
|
||||
s := server.NewMCPServer(
|
||||
version.BinaryName,
|
||||
version.Version,
|
||||
@@ -13,7 +17,9 @@ func Start() {
|
||||
server.WithPromptCapabilities(true),
|
||||
server.WithLogging(),
|
||||
)
|
||||
if err := server.ServeStdio(s); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return &Sever{s}
|
||||
}
|
||||
|
||||
func (s *Sever) ServeStdio() error {
|
||||
return server.ServeStdio(s.server)
|
||||
}
|
||||
|
||||
39
pkg/mcp/mcp_test.go
Normal file
39
pkg/mcp/mcp_test.go
Normal file
@@ -0,0 +1,39 @@
|
||||
package mcp
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/mark3labs/mcp-go/client"
|
||||
"github.com/mark3labs/mcp-go/mcp"
|
||||
"github.com/mark3labs/mcp-go/server"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCapabilities(t *testing.T) {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
s := NewSever()
|
||||
testServer := server.NewTestServer(s.server)
|
||||
defer testServer.Close()
|
||||
c, err := client.NewSSEMCPClient(testServer.URL + "/sse")
|
||||
defer func() {
|
||||
_ = c.Close()
|
||||
}()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
return
|
||||
}
|
||||
if err = c.Start(ctx); err != nil {
|
||||
t.Fatal(err)
|
||||
return
|
||||
}
|
||||
initRequest := mcp.InitializeRequest{}
|
||||
initRequest.Params.ProtocolVersion = mcp.LATEST_PROTOCOL_VERSION
|
||||
initRequest.Params.ClientInfo = mcp.Implementation{Name: "test", Version: "1.33.7"}
|
||||
ir, err := c.Initialize(ctx, initRequest)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
return
|
||||
}
|
||||
fmt.Print(ir)
|
||||
cancel()
|
||||
}
|
||||
@@ -3,4 +3,4 @@ package version
|
||||
var CommitHash = "unknown"
|
||||
var BuildTime = "1970-01-01T00:00:00Z"
|
||||
var Version = "0.0.0"
|
||||
var BinaryName = "automated-tasks"
|
||||
var BinaryName = "kubernetes-mcp-server"
|
||||
|
||||
Reference in New Issue
Block a user