feat: mcp server tested with client

This commit is contained in:
Marc Nuri
2025-02-12 13:14:36 +01:00
parent 20343666ed
commit c85f8ae97b
7 changed files with 104 additions and 7 deletions

View File

@@ -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

View 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
}

View File

@@ -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)
}
},
}

View 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
}
}

View File

@@ -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
View 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()
}

View File

@@ -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"