package mcpserver import ( "context" "reflect" "sort" "testing" "time" "github.com/modelcontextprotocol/go-sdk/mcp" ) func TestNewServerConstructsMCPServer(t *testing.T) { var server *mcp.Server = NewServer() if server == nil { t.Fatal("NewServer() returned nil") } } func TestNewServerRegistersN8WinHelperToolsWithoutCallingHelper(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) serverTransport, clientTransport := mcp.NewInMemoryTransports() server := NewServer() errCh := make(chan error, 1) go func() { errCh <- server.Run(ctx, serverTransport) }() client := mcp.NewClient(&mcp.Implementation{Name: "mcpserver-test-client", Version: "0.0.0"}, nil) session, err := client.Connect(ctx, clientTransport, nil) if err != nil { cancel() t.Fatalf("connect client: %v", err) } defer func() { _ = session.Close() cancel() select { case <-errCh: case <-time.After(2 * time.Second): t.Fatalf("server did not stop") } }() result, err := session.ListTools(context.Background(), &mcp.ListToolsParams{}) if err != nil { t.Fatalf("list tools: %v", err) } gotNames := make([]string, 0, len(result.Tools)) for _, tool := range result.Tools { gotNames = append(gotNames, tool.Name) } sort.Strings(gotNames) wantNames := []string{"win_helper_dump_uia", "win_helper_scan_windows", "win_helper_self_check", "win_helper_version"} if !reflect.DeepEqual(gotNames, wantNames) { t.Fatalf("server tool names = %#v, want %#v", gotNames, wantNames) } }