Skip to content

Commit c85f8ae

Browse files
committed
feat: mcp server tested with client
1 parent 2034366 commit c85f8ae

File tree

7 files changed

+104
-7
lines changed

7 files changed

+104
-7
lines changed

Makefile

+5-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
.DEFAULT_GOAL := help
99

10-
PACKAGE=github.com/manusa/kubernetes-mcp-server
10+
PACKAGE=$(shell go list -m)
1111
GIT_COMMIT_HASH=$(shell git rev-parse HEAD)
1212
GIT_VERSION=$(shell git describe --tags --always --dirty)
1313
BUILD_TIME=$(shell date -u '+%Y-%m-%dT%H:%M:%SZ')
@@ -42,6 +42,10 @@ build: ## Build the project
4242

4343
CLEAN_TARGETS+='$(BINARY_NAME)'
4444

45+
.PHONY: test
46+
test: ## Run the tests
47+
go test -v ./...
48+
4549
.PHONY: tidy
4650
tidy: ## Tidy up the go modules
4751
go mod tidy
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package main
2+
3+
import (
4+
"os"
5+
)
6+
7+
//goland:noinspection GoTestName
8+
func ExampleVersion() {
9+
oldArgs := os.Args
10+
defer func() { os.Args = oldArgs }()
11+
os.Args = []string{"kubernetes-mcp-server", "--version"}
12+
main()
13+
// Output: 0.0.0
14+
}

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,18 @@ Kubernetes Model Context Protocol (MCP) server
1717
# show this help
1818
kubernetes-mcp-server -h
1919
20+
# shows version information
21+
kubernetes-mcp-server --version
22+
2023
# TODO: add more examples`,
2124
Run: func(cmd *cobra.Command, args []string) {
2225
if viper.GetBool("version") {
2326
fmt.Println(version.Version)
2427
return
2528
}
26-
mcp.Start()
29+
if err := mcp.NewSever().ServeStdio(); err != nil {
30+
panic(err)
31+
}
2732
},
2833
}
2934

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package cmd
2+
3+
import (
4+
"io"
5+
"os"
6+
"testing"
7+
)
8+
9+
func captureOutput(f func() error) (string, error) {
10+
originalOut := os.Stdout
11+
defer func() {
12+
os.Stdout = originalOut
13+
}()
14+
r, w, _ := os.Pipe()
15+
os.Stdout = w
16+
err := f()
17+
_ = w.Close()
18+
out, _ := io.ReadAll(r)
19+
return string(out), err
20+
}
21+
22+
func TestVersion(t *testing.T) {
23+
rootCmd.SetArgs([]string{"--version"})
24+
version, err := captureOutput(rootCmd.Execute)
25+
if version != "0.0.0\n" {
26+
t.Fatalf("Expected version 0.0.0, got %s %v", version, err)
27+
return
28+
}
29+
}

pkg/mcp/mcp.go

+10-4
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,21 @@ import (
55
"github.com/mark3labs/mcp-go/server"
66
)
77

8-
func Start() {
8+
type Sever struct {
9+
server *server.MCPServer
10+
}
11+
12+
func NewSever() *Sever {
913
s := server.NewMCPServer(
1014
version.BinaryName,
1115
version.Version,
1216
server.WithResourceCapabilities(true, true),
1317
server.WithPromptCapabilities(true),
1418
server.WithLogging(),
1519
)
16-
if err := server.ServeStdio(s); err != nil {
17-
panic(err)
18-
}
20+
return &Sever{s}
21+
}
22+
23+
func (s *Sever) ServeStdio() error {
24+
return server.ServeStdio(s.server)
1925
}

pkg/mcp/mcp_test.go

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package mcp
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"github.com/mark3labs/mcp-go/client"
7+
"github.com/mark3labs/mcp-go/mcp"
8+
"github.com/mark3labs/mcp-go/server"
9+
"testing"
10+
)
11+
12+
func TestCapabilities(t *testing.T) {
13+
ctx, cancel := context.WithCancel(context.Background())
14+
s := NewSever()
15+
testServer := server.NewTestServer(s.server)
16+
defer testServer.Close()
17+
c, err := client.NewSSEMCPClient(testServer.URL + "/sse")
18+
defer func() {
19+
_ = c.Close()
20+
}()
21+
if err != nil {
22+
t.Fatal(err)
23+
return
24+
}
25+
if err = c.Start(ctx); err != nil {
26+
t.Fatal(err)
27+
return
28+
}
29+
initRequest := mcp.InitializeRequest{}
30+
initRequest.Params.ProtocolVersion = mcp.LATEST_PROTOCOL_VERSION
31+
initRequest.Params.ClientInfo = mcp.Implementation{Name: "test", Version: "1.33.7"}
32+
ir, err := c.Initialize(ctx, initRequest)
33+
if err != nil {
34+
t.Fatal(err)
35+
return
36+
}
37+
fmt.Print(ir)
38+
cancel()
39+
}

pkg/version/version.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ package version
33
var CommitHash = "unknown"
44
var BuildTime = "1970-01-01T00:00:00Z"
55
var Version = "0.0.0"
6-
var BinaryName = "automated-tasks"
6+
var BinaryName = "kubernetes-mcp-server"

0 commit comments

Comments
 (0)