diff --git a/images/transport/client.microgen.go b/images/transport/client.go
similarity index 68%
rename from images/transport/client.microgen.go
rename to images/transport/client.go
index d8b9342e08a9770c17cbc81ead84eddf57dd16fa..bfa7487ca160b8098337e4ebb885c74424aecd24 100644
--- a/images/transport/client.microgen.go
+++ b/images/transport/client.go
@@ -4,12 +4,9 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	images "git.perx.ru/perxis/perxis-go/images"
 	files "git.perx.ru/perxis/perxis-go/pkg/files"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Get(arg0 context.Context, arg1 *files.File, arg2 *images.GetOptions) (res0 *files.File, res1 error) {
@@ -19,9 +16,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 *files.File, arg2 *images
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Result, res1
diff --git a/images/transport/grpc/client.go b/images/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..167b69288bc0642221a70bce8a1e1f236ef48db9
--- /dev/null
+++ b/images/transport/grpc/client.go
@@ -0,0 +1,17 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/images/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint: grpcerr.ClientMiddleware(c.GetEndpoint),
+	}
+}
diff --git a/images/transport/grpc/server.go b/images/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..c36a57b0eadbd8878539d22d33cf57f7329b6b65
--- /dev/null
+++ b/images/transport/grpc/server.go
@@ -0,0 +1,17 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/images"
+	"git.perx.ru/perxis/perxis-go/images/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/images"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc images.Images, opts ...grpckit.ServerOption) pb.ImagesServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint: grpcerr.ServerMiddleware(eps.GetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/account/client.go b/pkg/account/client.go
index 112a71f67fe130bb57c6483ad4793565bca8d0bd..5349ed2917ed691f6661930ea0ffce72a79ab814 100644
--- a/pkg/account/client.go
+++ b/pkg/account/client.go
@@ -34,10 +34,10 @@ func NewClient(conn *grpc.ClientConn, opts ...Option) *Account {
 		c.logger = zap.NewNop()
 	}
 
-	client.Members = membersTransport.NewGRPCClient(conn, "", c.clientOptions...)
-	client.Organizations = organizationsTransport.NewGRPCClient(conn, "", c.clientOptions...)
-	client.Users = usersTransport.NewGRPCClient(conn, "", c.clientOptions...)
-	client.MembersObserver = membersObserverTransport.NewGRPCClient(conn, "", c.clientOptions...)
+	client.Members = membersTransport.NewClient(conn, c.clientOptions...)
+	client.Organizations = organizationsTransport.NewClient(conn, c.clientOptions...)
+	client.Users = usersTransport.NewClient(conn, c.clientOptions...)
+	client.MembersObserver = membersObserverTransport.NewClient(conn, c.clientOptions...)
 
 	if !c.noCache {
 		client = WithCaching(client, DefaultCacheSize, DefaultCacheTTL)
diff --git a/pkg/account/versions/transport/client.microgen.go b/pkg/account/versions/transport/client.go
similarity index 62%
rename from pkg/account/versions/transport/client.microgen.go
rename to pkg/account/versions/transport/client.go
index ec9a69655fab437a4146b6cc61973197f415ff2c..0713d94abcaca463a18d5e129314c0b8769a3ba4 100644
--- a/pkg/account/versions/transport/client.microgen.go
+++ b/pkg/account/versions/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	version "git.perx.ru/perxis/perxis-go/pkg/version"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Get(arg0 context.Context) (res0 *version.Version, res1 error) {
 	request := GetRequest{}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Version, res1
diff --git a/pkg/account/versions/transport/grpc/client.go b/pkg/account/versions/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..e5a94578ed037a87fbdfb5e7fdb324d401627f62
--- /dev/null
+++ b/pkg/account/versions/transport/grpc/client.go
@@ -0,0 +1,17 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/account/versions/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint: grpcerr.ClientMiddleware(c.GetEndpoint),
+	}
+}
diff --git a/pkg/account/versions/transport/grpc/server.go b/pkg/account/versions/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..960a9d0fba0b36e8658b84a692170714b42e281f
--- /dev/null
+++ b/pkg/account/versions/transport/grpc/server.go
@@ -0,0 +1,17 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/account/versions/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	versions "git.perx.ru/perxis/perxis-go/pkg/version"
+	pb "git.perx.ru/perxis/perxis-go/proto/versions/account"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc versions.Versions, opts ...grpckit.ServerOption) pb.VersionsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint: grpcerr.ServerMiddleware(eps.GetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/clients/transport/client.microgen.go b/pkg/clients/transport/client.go
similarity index 66%
rename from pkg/clients/transport/client.microgen.go
rename to pkg/clients/transport/client.go
index 633855af4d1f7fe74260ec7b4ece23db6063ebfb..008f60b019deac5e9e86aff7a6687a3c3fe8361a 100644
--- a/pkg/clients/transport/client.microgen.go
+++ b/pkg/clients/transport/client.go
@@ -4,19 +4,13 @@ package transport
 
 import (
 	"context"
-	"errors"
 	clients "git.perx.ru/perxis/perxis-go/pkg/clients"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *clients.Client) (res0 *clients.Client, res1 error) {
 	request := CreateRequest{Client: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -29,9 +23,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string) (res
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Client, res1
@@ -44,9 +35,6 @@ func (set EndpointsSet) GetBy(arg0 context.Context, arg1 string, arg2 *clients.G
 	}
 	response, res1 := set.GetByEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetByResponse).Client, res1
@@ -56,9 +44,6 @@ func (set EndpointsSet) List(arg0 context.Context, arg1 string) (res0 []*clients
 	request := ListRequest{SpaceId: arg1}
 	response, res1 := set.ListEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListResponse).Clients, res1
@@ -68,9 +53,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *clients.Client) (res0
 	request := UpdateRequest{Client: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -83,9 +65,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -99,9 +78,6 @@ func (set EndpointsSet) Enable(arg0 context.Context, arg1 string, arg2 string, a
 	}
 	_, res0 = set.EnableEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/clients/transport/grpc/client.go b/pkg/clients/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..fe6ba6fc8a14622b002b7f96b73f124c2ff2d5b2
--- /dev/null
+++ b/pkg/clients/transport/grpc/client.go
@@ -0,0 +1,23 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/clients/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ClientMiddleware(c.CreateEndpoint),
+		GetEndpoint:    grpcerr.ClientMiddleware(c.GetEndpoint),
+		GetByEndpoint:  grpcerr.ClientMiddleware(c.GetByEndpoint),
+		ListEndpoint:   grpcerr.ClientMiddleware(c.ListEndpoint),
+		UpdateEndpoint: grpcerr.ClientMiddleware(c.UpdateEndpoint),
+		DeleteEndpoint: grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		EnableEndpoint: grpcerr.ClientMiddleware(c.EnableEndpoint),
+	}
+}
diff --git a/pkg/clients/transport/grpc/server.go b/pkg/clients/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..ee019551141c4e3c6af7d4805cb6924a19e4d010
--- /dev/null
+++ b/pkg/clients/transport/grpc/server.go
@@ -0,0 +1,23 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/clients"
+	"git.perx.ru/perxis/perxis-go/pkg/clients/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/clients"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc clients.Clients, opts ...grpckit.ServerOption) pb.ClientsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		GetEndpoint:    grpcerr.ServerMiddleware(eps.GetEndpoint),
+		GetByEndpoint:  grpcerr.ServerMiddleware(eps.GetByEndpoint),
+		ListEndpoint:   grpcerr.ServerMiddleware(eps.ListEndpoint),
+		UpdateEndpoint: grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+		DeleteEndpoint: grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		EnableEndpoint: grpcerr.ServerMiddleware(eps.EnableEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/collaborators/transport/client.microgen.go b/pkg/collaborators/transport/client.go
similarity index 67%
rename from pkg/collaborators/transport/client.microgen.go
rename to pkg/collaborators/transport/client.go
index eb0dbbe7bc1ea7bad07220fba5cdc6e3b1c9e503..1e6477a11347742e6cf250ff336d3ca7f89b5ac0 100644
--- a/pkg/collaborators/transport/client.microgen.go
+++ b/pkg/collaborators/transport/client.go
@@ -4,11 +4,8 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	collaborators "git.perx.ru/perxis/perxis-go/pkg/collaborators"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Set(arg0 context.Context, arg1 string, arg2 string, arg3 string) (res0 error) {
@@ -19,9 +16,6 @@ func (set EndpointsSet) Set(arg0 context.Context, arg1 string, arg2 string, arg3
 	}
 	_, res0 = set.SetEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -34,9 +28,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string) (res
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Role, res1
@@ -49,9 +40,6 @@ func (set EndpointsSet) Remove(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.RemoveEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -61,9 +49,6 @@ func (set EndpointsSet) ListCollaborators(arg0 context.Context, arg1 string) (re
 	request := ListCollaboratorsRequest{SpaceId: arg1}
 	response, res1 := set.ListCollaboratorsEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListCollaboratorsResponse).Collaborators, res1
@@ -73,9 +58,6 @@ func (set EndpointsSet) ListSpaces(arg0 context.Context, arg1 string) (res0 []*c
 	request := ListSpacesRequest{Subject: arg1}
 	response, res1 := set.ListSpacesEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListSpacesResponse).Spaces, res1
diff --git a/pkg/collaborators/transport/grpc/client.go b/pkg/collaborators/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..ed7c951fe02289ce5d20e4ffec6d473024344591
--- /dev/null
+++ b/pkg/collaborators/transport/grpc/client.go
@@ -0,0 +1,21 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/collaborators/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint:               grpcerr.ClientMiddleware(c.GetEndpoint),
+		ListSpacesEndpoint:        grpcerr.ClientMiddleware(c.ListSpacesEndpoint),
+		ListCollaboratorsEndpoint: grpcerr.ClientMiddleware(c.ListCollaboratorsEndpoint),
+		RemoveEndpoint:            grpcerr.ClientMiddleware(c.RemoveEndpoint),
+		SetEndpoint:               grpcerr.ClientMiddleware(c.SetEndpoint),
+	}
+}
diff --git a/pkg/collaborators/transport/grpc/server.go b/pkg/collaborators/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..fa96dd487e740a10eadc1efbf8c10509c06940cb
--- /dev/null
+++ b/pkg/collaborators/transport/grpc/server.go
@@ -0,0 +1,21 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/collaborators"
+	"git.perx.ru/perxis/perxis-go/pkg/collaborators/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/collaborators"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc collaborators.Collaborators, opts ...grpckit.ServerOption) pb.CollaboratorsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint:               grpcerr.ServerMiddleware(eps.GetEndpoint),
+		ListSpacesEndpoint:        grpcerr.ServerMiddleware(eps.ListSpacesEndpoint),
+		ListCollaboratorsEndpoint: grpcerr.ServerMiddleware(eps.ListCollaboratorsEndpoint),
+		RemoveEndpoint:            grpcerr.ServerMiddleware(eps.RemoveEndpoint),
+		SetEndpoint:               grpcerr.ServerMiddleware(eps.SetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/collections/transport/client.microgen.go b/pkg/collections/transport/client.go
similarity index 71%
rename from pkg/collections/transport/client.microgen.go
rename to pkg/collections/transport/client.go
index 7fd5b53f360a927e48c00edcd3f4dc7606dd47fe..2a430e6c8893236c73c7979654c282cb6094b807 100644
--- a/pkg/collections/transport/client.microgen.go
+++ b/pkg/collections/transport/client.go
@@ -4,21 +4,15 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	collections "git.perx.ru/perxis/perxis-go/pkg/collections"
 	schema "git.perx.ru/perxis/perxis-go/pkg/schema"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *collections.Collection) (res0 *collections.Collection, res1 error) {
 	request := CreateRequest{Collection: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -33,9 +27,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string, arg3
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Collection, res1
@@ -49,9 +40,6 @@ func (set EndpointsSet) List(arg0 context.Context, arg1 string, arg2 string, arg
 	}
 	response, res1 := set.ListEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListResponse).Collections, res1
@@ -61,9 +49,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *collections.Collectio
 	request := UpdateRequest{Coll: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -78,9 +63,6 @@ func (set EndpointsSet) SetSchema(arg0 context.Context, arg1 string, arg2 string
 	}
 	_, res0 = set.SetSchemaEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -98,9 +80,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string, arg2 string, a
 	}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/collections/transport/grpc/client.go b/pkg/collections/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..8051b9b97cecf06a603d60925145bb55a7162a9d
--- /dev/null
+++ b/pkg/collections/transport/grpc/client.go
@@ -0,0 +1,22 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/collections/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint:    grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint:    grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		GetEndpoint:       grpcerr.ClientMiddleware(c.GetEndpoint),
+		ListEndpoint:      grpcerr.ClientMiddleware(c.ListEndpoint),
+		SetSchemaEndpoint: grpcerr.ClientMiddleware(c.SetSchemaEndpoint),
+		UpdateEndpoint:    grpcerr.ClientMiddleware(c.UpdateEndpoint),
+	}
+}
diff --git a/pkg/collections/transport/grpc/server.go b/pkg/collections/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..6482f1c416d7b0792b9ca2244a144de0bea627c1
--- /dev/null
+++ b/pkg/collections/transport/grpc/server.go
@@ -0,0 +1,22 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/collections"
+	"git.perx.ru/perxis/perxis-go/pkg/collections/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/collections"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc collections.Collections, opts ...grpckit.ServerOption) pb.CollectionsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint:    grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint:    grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		GetEndpoint:       grpcerr.ServerMiddleware(eps.GetEndpoint),
+		ListEndpoint:      grpcerr.ServerMiddleware(eps.ListEndpoint),
+		SetSchemaEndpoint: grpcerr.ServerMiddleware(eps.SetSchemaEndpoint),
+		UpdateEndpoint:    grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/content/client.go b/pkg/content/client.go
index bbdd62bb9474afd54ce63606055c244311478adc..adc5f784dff8fccd5b505867bf65efb373a9149d 100644
--- a/pkg/content/client.go
+++ b/pkg/content/client.go
@@ -47,14 +47,14 @@ func NewClient(conn *grpc.ClientConn, opts ...Option) *Content {
 	}
 
 	client.Spaces = spacesTransportGrpc.NewClient(conn, config.ClientOptions...)
-	client.Environments = environmentsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
-	client.Collections = collectionsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
+	client.Environments = environmentsTransportGrpc.NewClient(conn, config.ClientOptions...)
+	client.Collections = collectionsTransportGrpc.NewClient(conn, config.ClientOptions...)
 	client.Items = itemsTransportGrpc.NewClient(conn, config.ClientOptions...)
-	client.Invitations = invitationsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
-	client.Collaborators = collaboratorsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
-	client.Clients = clientsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
-	client.Locales = localsTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
-	client.Roles = rolesTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
+	client.Invitations = invitationsTransportGrpc.NewClient(conn, config.ClientOptions...)
+	client.Collaborators = collaboratorsTransportGrpc.NewClient(conn, config.ClientOptions...)
+	client.Clients = clientsTransportGrpc.NewClient(conn, config.ClientOptions...)
+	client.Locales = localsTransportGrpc.NewClient(conn, config.ClientOptions...)
+	client.Roles = rolesTransportGrpc.NewClient(conn, config.ClientOptions...)
 	client.References = referencesTransportGrpc.NewGRPCClient(conn, "", config.ClientOptions...)
 
 	if !config.NoDecode {
diff --git a/pkg/content/versions/transport/client.microgen.go b/pkg/content/versions/transport/client.go
similarity index 62%
rename from pkg/content/versions/transport/client.microgen.go
rename to pkg/content/versions/transport/client.go
index ec9a69655fab437a4146b6cc61973197f415ff2c..0713d94abcaca463a18d5e129314c0b8769a3ba4 100644
--- a/pkg/content/versions/transport/client.microgen.go
+++ b/pkg/content/versions/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	version "git.perx.ru/perxis/perxis-go/pkg/version"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Get(arg0 context.Context) (res0 *version.Version, res1 error) {
 	request := GetRequest{}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Version, res1
diff --git a/pkg/content/versions/transport/grpc/client.go b/pkg/content/versions/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..ffa435b90b00b707f097021f39fcea705e647ed6
--- /dev/null
+++ b/pkg/content/versions/transport/grpc/client.go
@@ -0,0 +1,17 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/content/versions/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint: grpcerr.ClientMiddleware(c.GetEndpoint),
+	}
+}
diff --git a/pkg/content/versions/transport/grpc/server.go b/pkg/content/versions/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..26b30d26150d8e8cb7cc4544f3d59f351ec4b56a
--- /dev/null
+++ b/pkg/content/versions/transport/grpc/server.go
@@ -0,0 +1,17 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/content/versions/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	versions "git.perx.ru/perxis/perxis-go/pkg/version"
+	pb "git.perx.ru/perxis/perxis-go/proto/versions/content"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc versions.Versions, opts ...grpckit.ServerOption) pb.VersionsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint: grpcerr.ServerMiddleware(eps.GetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/delivery/transport/client.microgen.go b/pkg/delivery/transport/client.go
similarity index 74%
rename from pkg/delivery/transport/client.microgen.go
rename to pkg/delivery/transport/client.go
index 8f2e1216f49441cf14afe4fe2fe509ba9898bca9..39c110029c1c78df3ccf4c01ef1073612fbba2c7 100644
--- a/pkg/delivery/transport/client.microgen.go
+++ b/pkg/delivery/transport/client.go
@@ -4,23 +4,17 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	collections "git.perx.ru/perxis/perxis-go/pkg/collections"
 	environments "git.perx.ru/perxis/perxis-go/pkg/environments"
 	items "git.perx.ru/perxis/perxis-go/pkg/items"
 	locales "git.perx.ru/perxis/perxis-go/pkg/locales"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) ListLocales(arg0 context.Context, arg1 string) (res0 []*locales.Locale, res1 error) {
 	request := ListLocalesRequest{SpaceId: arg1}
 	response, res1 := set.ListLocalesEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListLocalesResponse).Locales, res1
@@ -33,9 +27,6 @@ func (set EndpointsSet) GetEnvironment(arg0 context.Context, arg1 string, arg2 s
 	}
 	response, res1 := set.GetEnvironmentEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetEnvironmentResponse).Env, res1
@@ -45,9 +36,6 @@ func (set EndpointsSet) ListEnvironments(arg0 context.Context, arg1 string) (res
 	request := ListEnvironmentsRequest{SpaceId: arg1}
 	response, res1 := set.ListEnvironmentsEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListEnvironmentsResponse).Envs, res1
@@ -61,9 +49,6 @@ func (set EndpointsSet) GetCollection(arg0 context.Context, arg1 string, arg2 st
 	}
 	response, res1 := set.GetCollectionEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetCollectionResponse).Collection, res1
@@ -76,9 +61,6 @@ func (set EndpointsSet) ListCollections(arg0 context.Context, arg1 string, arg2
 	}
 	response, res1 := set.ListCollectionsEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListCollectionsResponse).Collections, res1
@@ -94,9 +76,6 @@ func (set EndpointsSet) GetItem(arg0 context.Context, arg1 string, arg2 string,
 	}
 	response, res1 := set.GetItemEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetItemResponse).Item, res1
@@ -112,9 +91,6 @@ func (set EndpointsSet) FindItems(arg0 context.Context, arg1 string, arg2 string
 	}
 	response, res2 := set.FindItemsEndpoint(arg0, &request)
 	if res2 != nil {
-		if e, ok := status.FromError(res2); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res2 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*FindItemsResponse).Items, response.(*FindItemsResponse).Total, res2
@@ -130,9 +106,6 @@ func (set EndpointsSet) Aggregate(arg0 context.Context, arg1 string, arg2 string
 	}
 	response, res1 := set.AggregateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*AggregateResponse).Result, res1
diff --git a/pkg/delivery/transport/grpc/client.go b/pkg/delivery/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..551b5d03c234e5f53b2434edf42262df5685ca68
--- /dev/null
+++ b/pkg/delivery/transport/grpc/client.go
@@ -0,0 +1,23 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/delivery/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		AggregateEndpoint:        grpcerr.ClientMiddleware(c.AggregateEndpoint),
+		FindItemsEndpoint:        grpcerr.ClientMiddleware(c.FindItemsEndpoint),
+		GetCollectionEndpoint:    grpcerr.ClientMiddleware(c.GetCollectionEndpoint),
+		GetEnvironmentEndpoint:   grpcerr.ClientMiddleware(c.GetEnvironmentEndpoint),
+		ListCollectionsEndpoint:  grpcerr.ClientMiddleware(c.ListCollectionsEndpoint),
+		ListEnvironmentsEndpoint: grpcerr.ClientMiddleware(c.ListEnvironmentsEndpoint),
+		ListLocalesEndpoint:      grpcerr.ClientMiddleware(c.ListLocalesEndpoint),
+	}
+}
diff --git a/pkg/delivery/transport/grpc/server.go b/pkg/delivery/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..b5b992ee01d098b56e6784fe0fc7c0744c0b5d92
--- /dev/null
+++ b/pkg/delivery/transport/grpc/server.go
@@ -0,0 +1,23 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/delivery"
+	"git.perx.ru/perxis/perxis-go/pkg/delivery/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/delivery"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc delivery.Delivery, opts ...grpckit.ServerOption) pb.DeliveryServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		AggregateEndpoint:        grpcerr.ServerMiddleware(eps.AggregateEndpoint),
+		FindItemsEndpoint:        grpcerr.ServerMiddleware(eps.FindItemsEndpoint),
+		GetCollectionEndpoint:    grpcerr.ServerMiddleware(eps.GetCollectionEndpoint),
+		GetEnvironmentEndpoint:   grpcerr.ServerMiddleware(eps.GetEnvironmentEndpoint),
+		ListCollectionsEndpoint:  grpcerr.ServerMiddleware(eps.ListCollectionsEndpoint),
+		ListEnvironmentsEndpoint: grpcerr.ServerMiddleware(eps.ListEnvironmentsEndpoint),
+		ListLocalesEndpoint:      grpcerr.ServerMiddleware(eps.ListLocalesEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/environments/transport/client.microgen.go b/pkg/environments/transport/client.go
similarity index 66%
rename from pkg/environments/transport/client.microgen.go
rename to pkg/environments/transport/client.go
index 96094fda943e407d0264a8abc738fd5c3afe440e..d562acc24da13a6e0de05bedf6d78e419bdc2386 100644
--- a/pkg/environments/transport/client.microgen.go
+++ b/pkg/environments/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	environments "git.perx.ru/perxis/perxis-go/pkg/environments"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *environments.Environment) (res0 *environments.Environment, res1 error) {
 	request := CreateRequest{Env: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -30,9 +24,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string) (res
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Env, res1
@@ -42,9 +33,6 @@ func (set EndpointsSet) List(arg0 context.Context, arg1 string) (res0 []*environ
 	request := ListRequest{SpaceId: arg1}
 	response, res1 := set.ListEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListResponse).Envs, res1
@@ -54,9 +42,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *environments.Environm
 	request := UpdateRequest{Env: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -69,9 +54,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -85,9 +67,6 @@ func (set EndpointsSet) SetAlias(arg0 context.Context, arg1 string, arg2 string,
 	}
 	_, res0 = set.SetAliasEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -101,9 +80,6 @@ func (set EndpointsSet) RemoveAlias(arg0 context.Context, arg1 string, arg2 stri
 	}
 	_, res0 = set.RemoveAliasEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -117,9 +93,6 @@ func (set EndpointsSet) Migrate(arg0 context.Context, arg1 string, arg2 string,
 	}
 	_, res0 = set.MigrateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/environments/transport/grpc/client.go b/pkg/environments/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..c882782b3cb880317bc4a2e043f96c517136f3c3
--- /dev/null
+++ b/pkg/environments/transport/grpc/client.go
@@ -0,0 +1,24 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	transport "git.perx.ru/perxis/perxis-go/pkg/environments/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint:      grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint:      grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		GetEndpoint:         grpcerr.ClientMiddleware(c.GetEndpoint),
+		ListEndpoint:        grpcerr.ClientMiddleware(c.ListEndpoint),
+		MigrateEndpoint:     grpcerr.ClientMiddleware(c.MigrateEndpoint),
+		RemoveAliasEndpoint: grpcerr.ClientMiddleware(c.RemoveAliasEndpoint),
+		SetAliasEndpoint:    grpcerr.ClientMiddleware(c.SetAliasEndpoint),
+		UpdateEndpoint:      grpcerr.ClientMiddleware(c.UpdateEndpoint),
+	}
+}
diff --git a/pkg/environments/transport/grpc/server.go b/pkg/environments/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..ed25b89f33790c7fedff28aed7868d2a6172af88
--- /dev/null
+++ b/pkg/environments/transport/grpc/server.go
@@ -0,0 +1,24 @@
+package transportgrpc
+
+import (
+	"git.perx.ru/perxis/perxis-go/pkg/environments"
+	"git.perx.ru/perxis/perxis-go/pkg/environments/transport"
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	pb "git.perx.ru/perxis/perxis-go/proto/environments"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc environments.Environments, opts ...grpckit.ServerOption) pb.EnvironmentsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint:      grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint:      grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		GetEndpoint:         grpcerr.ServerMiddleware(eps.GetEndpoint),
+		ListEndpoint:        grpcerr.ServerMiddleware(eps.ListEndpoint),
+		MigrateEndpoint:     grpcerr.ServerMiddleware(eps.MigrateEndpoint),
+		RemoveAliasEndpoint: grpcerr.ServerMiddleware(eps.RemoveAliasEndpoint),
+		SetAliasEndpoint:    grpcerr.ServerMiddleware(eps.SetAliasEndpoint),
+		UpdateEndpoint:      grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/files/transport/client.microgen.go b/pkg/files/transport/client.go
similarity index 66%
rename from pkg/files/transport/client.microgen.go
rename to pkg/files/transport/client.go
index 6320c479808103ebdfef774c51c85fa1ea5f9cfe..09bf05fece9262b9811ed3cb9d0323f9aeb1267d 100644
--- a/pkg/files/transport/client.microgen.go
+++ b/pkg/files/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	files "git.perx.ru/perxis/perxis-go/pkg/files"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) StartUpload(arg0 context.Context, arg1 *files.MultipartUpload) (res0 *files.MultipartUpload, res1 error) {
 	request := StartUploadRequest{Upload: arg1}
 	response, res1 := set.StartUploadEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*StartUploadResponse).U, res1
@@ -27,9 +21,6 @@ func (set EndpointsSet) CompleteUpload(arg0 context.Context, arg1 *files.Multipa
 	request := CompleteUploadRequest{Upload: arg1}
 	response, res1 := set.CompleteUploadEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CompleteUploadResponse).U, res1
@@ -39,9 +30,6 @@ func (set EndpointsSet) AbortUpload(arg0 context.Context, arg1 *files.MultipartU
 	request := AbortUploadRequest{Upload: arg1}
 	_, res0 = set.AbortUploadEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -51,9 +39,6 @@ func (set EndpointsSet) MoveUpload(arg0 context.Context, arg1 *files.MultipartUp
 	request := MoveUploadRequest{Upload: arg1}
 	response, res1 := set.MoveUploadEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*MoveUploadResponse).File, res1
@@ -63,9 +48,6 @@ func (set EndpointsSet) Upload(arg0 context.Context, arg1 *files.File) (res0 *fi
 	request := UploadRequest{File: arg1}
 	response, res1 := set.UploadEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*UploadResponse).U, res1
@@ -75,9 +57,6 @@ func (set EndpointsSet) GetFile(arg0 context.Context, arg1 *files.File) (res0 *f
 	request := GetFileRequest{File: arg1}
 	response, res1 := set.GetFileEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetFileResponse).F, res1
@@ -87,9 +66,6 @@ func (set EndpointsSet) DeleteFile(arg0 context.Context, arg1 *files.File) (res0
 	request := DeleteFileRequest{File: arg1}
 	_, res0 = set.DeleteFileEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/files/transport/grpc/client.go b/pkg/files/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..e528e995661c010eaf46206f003fcdbf43635810
--- /dev/null
+++ b/pkg/files/transport/grpc/client.go
@@ -0,0 +1,23 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/files/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		AbortUploadEndpoint:    grpcerr.ClientMiddleware(c.AbortUploadEndpoint),
+		CompleteUploadEndpoint: grpcerr.ClientMiddleware(c.CompleteUploadEndpoint),
+		DeleteFileEndpoint:     grpcerr.ClientMiddleware(c.DeleteFileEndpoint),
+		GetFileEndpoint:        grpcerr.ClientMiddleware(c.GetFileEndpoint),
+		MoveUploadEndpoint:     grpcerr.ClientMiddleware(c.MoveUploadEndpoint),
+		StartUploadEndpoint:    grpcerr.ClientMiddleware(c.StartUploadEndpoint),
+		UploadEndpoint:         grpcerr.ClientMiddleware(c.UploadEndpoint),
+	}
+}
diff --git a/pkg/files/transport/grpc/server.go b/pkg/files/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..dcfc07598dbd6b2e0adb04d804e1cb8f223e55bf
--- /dev/null
+++ b/pkg/files/transport/grpc/server.go
@@ -0,0 +1,23 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/files"
+	"git.perx.ru/perxis/perxis-go/pkg/files/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/files"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc files.Files, opts ...grpckit.ServerOption) pb.FilesServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		AbortUploadEndpoint:    grpcerr.ServerMiddleware(eps.AbortUploadEndpoint),
+		CompleteUploadEndpoint: grpcerr.ServerMiddleware(eps.CompleteUploadEndpoint),
+		DeleteFileEndpoint:     grpcerr.ServerMiddleware(eps.DeleteFileEndpoint),
+		GetFileEndpoint:        grpcerr.ServerMiddleware(eps.GetFileEndpoint),
+		MoveUploadEndpoint:     grpcerr.ServerMiddleware(eps.MoveUploadEndpoint),
+		StartUploadEndpoint:    grpcerr.ServerMiddleware(eps.StartUploadEndpoint),
+		UploadEndpoint:         grpcerr.ServerMiddleware(eps.UploadEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/invitations/transport/client.microgen.go b/pkg/invitations/transport/client.go
similarity index 67%
rename from pkg/invitations/transport/client.microgen.go
rename to pkg/invitations/transport/client.go
index 6f896b0e67fa88a1eaa539c305a47fada11c9c8b..04ad55679775497da0ec7919450c8e8d54738a90 100644
--- a/pkg/invitations/transport/client.microgen.go
+++ b/pkg/invitations/transport/client.go
@@ -4,21 +4,15 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	invitations "git.perx.ru/perxis/perxis-go/pkg/invitations"
 	"git.perx.ru/perxis/perxis-go/pkg/options"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *invitations.Invitation) (res0 *invitations.Invitation, res1 error) {
 	request := CreateRequest{Invitation: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -28,9 +22,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string) (res0 *invitation
 	request := GetRequest{InvitationId: arg1}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Invitation, res1
@@ -43,9 +34,6 @@ func (set EndpointsSet) Accept(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.AcceptEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -58,9 +46,6 @@ func (set EndpointsSet) Find(arg0 context.Context, arg1 *invitations.Filter, arg
 	}
 	response, res2 := set.FindEndpoint(arg0, &request)
 	if res2 != nil {
-		if e, ok := status.FromError(res2); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res2 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*FindResponse).Invitations, response.(*FindResponse).Total, res2
@@ -70,9 +55,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string) (res0 error) {
 	request := DeleteRequest{InvitationId: arg1}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/invitations/transport/grpc/client.go b/pkg/invitations/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..995dc563cc84f24b6f470de43531c6a6e62b90b2
--- /dev/null
+++ b/pkg/invitations/transport/grpc/client.go
@@ -0,0 +1,21 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/invitations/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		AcceptEndpoint: grpcerr.ClientMiddleware(c.AcceptEndpoint),
+		CreateEndpoint: grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		FindEndpoint:   grpcerr.ClientMiddleware(c.FindEndpoint),
+		GetEndpoint:    grpcerr.ClientMiddleware(c.GetEndpoint),
+	}
+}
diff --git a/pkg/invitations/transport/grpc/server.go b/pkg/invitations/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..f0a23fcd1d4f21c3f0dde9b72e7cee1757ace8b4
--- /dev/null
+++ b/pkg/invitations/transport/grpc/server.go
@@ -0,0 +1,21 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/invitations"
+	"git.perx.ru/perxis/perxis-go/pkg/invitations/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/invitations"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc invitations.Invitations, opts ...grpckit.ServerOption) pb.InvitationsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		AcceptEndpoint: grpcerr.ServerMiddleware(eps.AcceptEndpoint),
+		CreateEndpoint: grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		FindEndpoint:   grpcerr.ServerMiddleware(eps.FindEndpoint),
+		GetEndpoint:    grpcerr.ServerMiddleware(eps.GetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/locales/transport/client.microgen.go b/pkg/locales/transport/client.go
similarity index 65%
rename from pkg/locales/transport/client.microgen.go
rename to pkg/locales/transport/client.go
index f8cd9dee23dafeff1d635b3f5ee42f6e5c8667f1..7aa15eda1f74110ad9b602e31f4e9889c971720a 100644
--- a/pkg/locales/transport/client.microgen.go
+++ b/pkg/locales/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	locales "git.perx.ru/perxis/perxis-go/pkg/locales"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *locales.Locale) (res0 *locales.Locale, res1 error) {
 	request := CreateRequest{Locale: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -27,9 +21,6 @@ func (set EndpointsSet) List(arg0 context.Context, arg1 string) (res0 []*locales
 	request := ListRequest{SpaceId: arg1}
 	response, res1 := set.ListEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListResponse).Locales, res1
@@ -42,9 +33,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/locales/transport/grpc/client.go b/pkg/locales/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..8c1687cd77db13c1353b1b82cc26e191f519df14
--- /dev/null
+++ b/pkg/locales/transport/grpc/client.go
@@ -0,0 +1,19 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/locales/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		ListEndpoint:   grpcerr.ClientMiddleware(c.ListEndpoint),
+	}
+}
diff --git a/pkg/locales/transport/grpc/server.go b/pkg/locales/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..7e7667cf0a0bd00e0affbf79fa682f98d2df650c
--- /dev/null
+++ b/pkg/locales/transport/grpc/server.go
@@ -0,0 +1,19 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/locales"
+	"git.perx.ru/perxis/perxis-go/pkg/locales/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/locales"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc locales.Locales, opts ...grpckit.ServerOption) pb.LocalesServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		ListEndpoint:   grpcerr.ServerMiddleware(eps.ListEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/members/observer/transport/client.microgen.go b/pkg/members/observer/transport/client.go
similarity index 68%
rename from pkg/members/observer/transport/client.microgen.go
rename to pkg/members/observer/transport/client.go
index 28ca2a88bdbb5e5095b8c2f7d2e9a5e85b67cc09..957fd556fe9e43bac595faed40a5da3b6bd06045 100644
--- a/pkg/members/observer/transport/client.microgen.go
+++ b/pkg/members/observer/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	collaborators "git.perx.ru/perxis/perxis-go/pkg/collaborators"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) OnCollaboratorSet(arg0 context.Context, arg1 *collaborators.Collaborator) (res0 string, res1 error) {
 	request := OnCollaboratorSetRequest{Collaborator: arg1}
 	response, res1 := set.OnCollaboratorSetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*OnCollaboratorSetResponse).DelayedTaskID, res1
diff --git a/pkg/members/observer/transport/grpc/client.go b/pkg/members/observer/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..321ee07dcfe5a964c60a114c18b8f2abe88cc2a3
--- /dev/null
+++ b/pkg/members/observer/transport/grpc/client.go
@@ -0,0 +1,17 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/members/observer/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		OnCollaboratorSetEndpoint: grpcerr.ClientMiddleware(c.OnCollaboratorSetEndpoint),
+	}
+}
diff --git a/pkg/members/observer/transport/grpc/server.go b/pkg/members/observer/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..beb4b614b2466ea6bbe9aa7da73b64c863fad276
--- /dev/null
+++ b/pkg/members/observer/transport/grpc/server.go
@@ -0,0 +1,17 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/members/observer"
+	"git.perx.ru/perxis/perxis-go/pkg/members/observer/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/members"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc observer.Observer, opts ...grpckit.ServerOption) pb.ObserverServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		OnCollaboratorSetEndpoint: grpcerr.ServerMiddleware(eps.OnCollaboratorSetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/members/transport/client.microgen.go b/pkg/members/transport/client.go
similarity index 68%
rename from pkg/members/transport/client.microgen.go
rename to pkg/members/transport/client.go
index 4cd10cad5b1b970f30a9380eae77a5d706748a08..8b3b27bdf0eb100e2b147505d3a638812ee3286b 100644
--- a/pkg/members/transport/client.microgen.go
+++ b/pkg/members/transport/client.go
@@ -4,11 +4,8 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	members "git.perx.ru/perxis/perxis-go/pkg/members"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Set(arg0 context.Context, arg1 string, arg2 string, arg3 members.Role) (res0 error) {
@@ -19,9 +16,6 @@ func (set EndpointsSet) Set(arg0 context.Context, arg1 string, arg2 string, arg3
 	}
 	_, res0 = set.SetEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -34,9 +28,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string) (res
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Role, res1
@@ -49,9 +40,6 @@ func (set EndpointsSet) Remove(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.RemoveEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -65,9 +53,6 @@ func (set EndpointsSet) ListMembers(arg0 context.Context, arg1 string) (res0 []*
 	request := ListMembersRequest{OrgId: arg1}
 	response, res1 := set.ListMembersEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListMembersResponse).Members, res1
@@ -77,9 +62,6 @@ func (set EndpointsSet) ListOrganizations(arg0 context.Context, arg1 string) (re
 	request := ListOrganizationsRequest{UserId: arg1}
 	response, res1 := set.ListOrganizationsEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListOrganizationsResponse).Organizations, res1
diff --git a/pkg/members/transport/grpc/client.go b/pkg/members/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..dc79e343c6bb173a64752d536bdd6bc1ba88e740
--- /dev/null
+++ b/pkg/members/transport/grpc/client.go
@@ -0,0 +1,21 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/members/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint:               grpcerr.ClientMiddleware(c.GetEndpoint),
+		ListMembersEndpoint:       grpcerr.ClientMiddleware(c.ListMembersEndpoint),
+		ListOrganizationsEndpoint: grpcerr.ClientMiddleware(c.ListOrganizationsEndpoint),
+		RemoveEndpoint:            grpcerr.ClientMiddleware(c.RemoveEndpoint),
+		SetEndpoint:               grpcerr.ClientMiddleware(c.SetEndpoint),
+	}
+}
diff --git a/pkg/members/transport/grpc/server.go b/pkg/members/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..d87048167b71a4cc22e031f164ee4725e7534428
--- /dev/null
+++ b/pkg/members/transport/grpc/server.go
@@ -0,0 +1,21 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/members"
+	"git.perx.ru/perxis/perxis-go/pkg/members/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/members"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc members.Members, opts ...grpckit.ServerOption) pb.MembersServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint:               grpcerr.ServerMiddleware(eps.GetEndpoint),
+		ListMembersEndpoint:       grpcerr.ServerMiddleware(eps.ListMembersEndpoint),
+		ListOrganizationsEndpoint: grpcerr.ServerMiddleware(eps.ListOrganizationsEndpoint),
+		RemoveEndpoint:            grpcerr.ServerMiddleware(eps.RemoveEndpoint),
+		SetEndpoint:               grpcerr.ServerMiddleware(eps.SetEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/organizations/transport/client.microgen.go b/pkg/organizations/transport/client.go
similarity index 67%
rename from pkg/organizations/transport/client.microgen.go
rename to pkg/organizations/transport/client.go
index 00b14af754877e02fe3936269d72cb13c7b138da..e08e3346129b8ec886f3eb83709c4047fd4eac43 100644
--- a/pkg/organizations/transport/client.microgen.go
+++ b/pkg/organizations/transport/client.go
@@ -4,21 +4,15 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	options "git.perx.ru/perxis/perxis-go/pkg/options"
 	organizations "git.perx.ru/perxis/perxis-go/pkg/organizations"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *organizations.Organization) (res0 *organizations.Organization, res1 error) {
 	request := CreateRequest{Org: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -28,9 +22,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string) (res0 *organizati
 	request := GetRequest{OrgId: arg1}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Org, res1
@@ -40,9 +31,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *organizations.Organiz
 	request := UpdateRequest{Org: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -52,9 +40,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string) (res0 error) {
 	request := DeleteRequest{OrgId: arg1}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -67,9 +52,6 @@ func (set EndpointsSet) Find(arg0 context.Context, arg1 *organizations.Filter, a
 	}
 	response, res2 := set.FindEndpoint(arg0, &request)
 	if res2 != nil {
-		if e, ok := status.FromError(res2); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res2 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*FindResponse).Orgs, response.(*FindResponse).Total, res2
diff --git a/pkg/organizations/transport/grpc/client.go b/pkg/organizations/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..3e8793d1b81dd2c6e28b2c24a6be7b4d5b23ff95
--- /dev/null
+++ b/pkg/organizations/transport/grpc/client.go
@@ -0,0 +1,21 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/organizations/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		FindEndpoint:   grpcerr.ClientMiddleware(c.FindEndpoint),
+		GetEndpoint:    grpcerr.ClientMiddleware(c.GetEndpoint),
+		UpdateEndpoint: grpcerr.ClientMiddleware(c.UpdateEndpoint),
+	}
+}
diff --git a/pkg/organizations/transport/grpc/server.go b/pkg/organizations/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..8748dabd8cd66b1c0597dce50b1cf43f87938d2e
--- /dev/null
+++ b/pkg/organizations/transport/grpc/server.go
@@ -0,0 +1,21 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/organizations"
+	"git.perx.ru/perxis/perxis-go/pkg/organizations/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/organizations"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc organizations.Organizations, opts ...grpckit.ServerOption) pb.OrganizationsServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		FindEndpoint:   grpcerr.ServerMiddleware(eps.FindEndpoint),
+		GetEndpoint:    grpcerr.ServerMiddleware(eps.GetEndpoint),
+		UpdateEndpoint: grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/references/transport/client.microgen.go b/pkg/references/transport/client.go
similarity index 76%
rename from pkg/references/transport/client.microgen.go
rename to pkg/references/transport/client.go
index 5c0eb4143138bac3e2eecb3713103cf7c347c873..54cf13e3582842b5d1e2824cf720e2202ea95b6d 100644
--- a/pkg/references/transport/client.microgen.go
+++ b/pkg/references/transport/client.go
@@ -4,12 +4,9 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	items "git.perx.ru/perxis/perxis-go/pkg/items"
 	references "git.perx.ru/perxis/perxis-go/pkg/references"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string, arg3 []*references.Reference) (res0 []*items.Item, res1 []*references.Reference, res2 error) {
@@ -20,9 +17,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string, arg3
 	}
 	response, res2 := set.GetEndpoint(arg0, &request)
 	if res2 != nil {
-		if e, ok := status.FromError(res2); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res2 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Items, response.(*GetResponse).Notfound, res2
@@ -38,9 +32,6 @@ func (set EndpointsSet) Publish(arg0 context.Context, arg1 string, arg2 string,
 	}
 	response, res3 := set.PublishEndpoint(arg0, &request)
 	if res3 != nil {
-		if e, ok := status.FromError(res3); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res3 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*PublishResponse).Published, response.(*PublishResponse).Notfound, response.(*PublishResponse).Unpublished, res3
diff --git a/pkg/references/transport/grpc/client.go b/pkg/references/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..01e5debd6080274fa42afe4779efc0190e8716ed
--- /dev/null
+++ b/pkg/references/transport/grpc/client.go
@@ -0,0 +1,18 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/references/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		GetEndpoint:     grpcerr.ClientMiddleware(c.GetEndpoint),
+		PublishEndpoint: grpcerr.ClientMiddleware(c.PublishEndpoint),
+	}
+}
diff --git a/pkg/references/transport/grpc/server.go b/pkg/references/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..32a4beac6e564c40d19a7cad937f8191fd8fe54c
--- /dev/null
+++ b/pkg/references/transport/grpc/server.go
@@ -0,0 +1,18 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/references"
+	"git.perx.ru/perxis/perxis-go/pkg/references/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/references"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc references.References, opts ...grpckit.ServerOption) pb.ReferencesServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		GetEndpoint:     grpcerr.ServerMiddleware(eps.GetEndpoint),
+		PublishEndpoint: grpcerr.ServerMiddleware(eps.PublishEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/roles/transport/client.microgen.go b/pkg/roles/transport/client.go
similarity index 64%
rename from pkg/roles/transport/client.microgen.go
rename to pkg/roles/transport/client.go
index 71b1de9e2b1b746962effe61dc63c37cf7977e69..1b36431f5371bb93579f6bf985aa184337ac086b 100644
--- a/pkg/roles/transport/client.microgen.go
+++ b/pkg/roles/transport/client.go
@@ -4,20 +4,14 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	roles "git.perx.ru/perxis/perxis-go/pkg/roles"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *roles.Role) (res0 *roles.Role, res1 error) {
 	request := CreateRequest{Role: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).Created, res1
@@ -30,9 +24,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string, arg2 string) (res
 	}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).Role, res1
@@ -42,9 +33,6 @@ func (set EndpointsSet) List(arg0 context.Context, arg1 string) (res0 []*roles.R
 	request := ListRequest{SpaceId: arg1}
 	response, res1 := set.ListEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*ListResponse).Roles, res1
@@ -54,9 +42,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *roles.Role) (res0 err
 	request := UpdateRequest{Role: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -69,9 +54,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string, arg2 string) (
 	}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
diff --git a/pkg/roles/transport/grpc/client.go b/pkg/roles/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..06a23a7bceb96992c5114a46c1995eb5b4d8518c
--- /dev/null
+++ b/pkg/roles/transport/grpc/client.go
@@ -0,0 +1,21 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/roles/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		GetEndpoint:    grpcerr.ClientMiddleware(c.GetEndpoint),
+		ListEndpoint:   grpcerr.ClientMiddleware(c.ListEndpoint),
+		UpdateEndpoint: grpcerr.ClientMiddleware(c.UpdateEndpoint),
+	}
+}
diff --git a/pkg/roles/transport/grpc/server.go b/pkg/roles/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..764efc8a4185e2078cac995a2a40a8010c94dd93
--- /dev/null
+++ b/pkg/roles/transport/grpc/server.go
@@ -0,0 +1,21 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/roles"
+	"git.perx.ru/perxis/perxis-go/pkg/roles/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/roles"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc roles.Roles, opts ...grpckit.ServerOption) pb.RolesServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint: grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint: grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		GetEndpoint:    grpcerr.ServerMiddleware(eps.GetEndpoint),
+		ListEndpoint:   grpcerr.ServerMiddleware(eps.ListEndpoint),
+		UpdateEndpoint: grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}
diff --git a/pkg/users/transport/client.microgen.go b/pkg/users/transport/client.go
similarity index 66%
rename from pkg/users/transport/client.microgen.go
rename to pkg/users/transport/client.go
index 74ca261a3bc5ec1cf99c655c82ec5b0345489ce3..01537b1123040311fcd9fb036c8765066d2f65b1 100644
--- a/pkg/users/transport/client.microgen.go
+++ b/pkg/users/transport/client.go
@@ -4,21 +4,15 @@ package transport
 
 import (
 	"context"
-	"errors"
 
 	options "git.perx.ru/perxis/perxis-go/pkg/options"
 	users "git.perx.ru/perxis/perxis-go/pkg/users"
-	codes "google.golang.org/grpc/codes"
-	status "google.golang.org/grpc/status"
 )
 
 func (set EndpointsSet) Create(arg0 context.Context, arg1 *users.User) (res0 *users.User, res1 error) {
 	request := CreateRequest{Create: arg1}
 	response, res1 := set.CreateEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*CreateResponse).User, res1
@@ -28,9 +22,6 @@ func (set EndpointsSet) Get(arg0 context.Context, arg1 string) (res0 *users.User
 	request := GetRequest{UserId: arg1}
 	response, res1 := set.GetEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetResponse).User, res1
@@ -43,9 +34,6 @@ func (set EndpointsSet) Find(arg0 context.Context, arg1 *users.Filter, arg2 *opt
 	}
 	response, res2 := set.FindEndpoint(arg0, &request)
 	if res2 != nil {
-		if e, ok := status.FromError(res2); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res2 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*FindResponse).Users, response.(*FindResponse).Total, res2
@@ -55,9 +43,6 @@ func (set EndpointsSet) Update(arg0 context.Context, arg1 *users.User) (res0 err
 	request := UpdateRequest{Update: arg1}
 	_, res0 = set.UpdateEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -67,9 +52,6 @@ func (set EndpointsSet) Delete(arg0 context.Context, arg1 string) (res0 error) {
 	request := DeleteRequest{UserId: arg1}
 	_, res0 = set.DeleteEndpoint(arg0, &request)
 	if res0 != nil {
-		if e, ok := status.FromError(res0); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res0 = errors.New(e.Message())
-		}
 		return
 	}
 	return res0
@@ -79,9 +61,6 @@ func (set EndpointsSet) GetByIdentity(arg0 context.Context, arg1 string) (res0 *
 	request := GetByIdentityRequest{Identity: arg1}
 	response, res1 := set.GetByIdentityEndpoint(arg0, &request)
 	if res1 != nil {
-		if e, ok := status.FromError(res1); ok || e.Code() == codes.Internal || e.Code() == codes.Unknown {
-			res1 = errors.New(e.Message())
-		}
 		return
 	}
 	return response.(*GetByIdentityResponse).User, res1
diff --git a/pkg/users/transport/grpc/client.go b/pkg/users/transport/grpc/client.go
new file mode 100644
index 0000000000000000000000000000000000000000..7364d5fce73a58580ed59bd71539bab3a1e68668
--- /dev/null
+++ b/pkg/users/transport/grpc/client.go
@@ -0,0 +1,22 @@
+// Code generated by microgen 0.9.1. DO NOT EDIT.
+
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	transport "git.perx.ru/perxis/perxis-go/pkg/users/transport"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+	grpc "google.golang.org/grpc"
+)
+
+func NewClient(conn *grpc.ClientConn, opts ...grpckit.ClientOption) transport.EndpointsSet {
+	c := NewGRPCClient(conn, "", opts...)
+	return transport.EndpointsSet{
+		CreateEndpoint:        grpcerr.ClientMiddleware(c.CreateEndpoint),
+		DeleteEndpoint:        grpcerr.ClientMiddleware(c.DeleteEndpoint),
+		FindEndpoint:          grpcerr.ClientMiddleware(c.FindEndpoint),
+		GetByIdentityEndpoint: grpcerr.ClientMiddleware(c.GetByIdentityEndpoint),
+		GetEndpoint:           grpcerr.ClientMiddleware(c.GetEndpoint),
+		UpdateEndpoint:        grpcerr.ClientMiddleware(c.UpdateEndpoint),
+	}
+}
diff --git a/pkg/users/transport/grpc/server.go b/pkg/users/transport/grpc/server.go
new file mode 100644
index 0000000000000000000000000000000000000000..07211008e3d631e1c23a658a31fa67f8f983a058
--- /dev/null
+++ b/pkg/users/transport/grpc/server.go
@@ -0,0 +1,22 @@
+package transportgrpc
+
+import (
+	grpcerr "git.perx.ru/perxis/perxis-go/pkg/errors/grpc"
+	"git.perx.ru/perxis/perxis-go/pkg/users"
+	"git.perx.ru/perxis/perxis-go/pkg/users/transport"
+	pb "git.perx.ru/perxis/perxis-go/proto/users"
+	grpckit "github.com/go-kit/kit/transport/grpc"
+)
+
+func NewServer(svc users.Users, opts ...grpckit.ServerOption) pb.UsersServer {
+	eps := transport.Endpoints(svc)
+	eps = transport.EndpointsSet{
+		CreateEndpoint:        grpcerr.ServerMiddleware(eps.CreateEndpoint),
+		DeleteEndpoint:        grpcerr.ServerMiddleware(eps.DeleteEndpoint),
+		FindEndpoint:          grpcerr.ServerMiddleware(eps.FindEndpoint),
+		GetByIdentityEndpoint: grpcerr.ServerMiddleware(eps.GetByIdentityEndpoint),
+		GetEndpoint:           grpcerr.ServerMiddleware(eps.GetEndpoint),
+		UpdateEndpoint:        grpcerr.ServerMiddleware(eps.UpdateEndpoint),
+	}
+	return NewGRPCServer(&eps, opts...)
+}