diff --git a/apps/connection-manager/src/application.ts b/apps/connection-manager/src/application.ts
index 3ea98e396c90242b557c98e1aacb1580503fe519..e8cc292c369fe1aeb75cba0b5194eee1e10282b8 100644
--- a/apps/connection-manager/src/application.ts
+++ b/apps/connection-manager/src/application.ts
@@ -1,10 +1,10 @@
+import type { OnApplicationBootstrap } from '@nestjs/common';
 import type { ConfigType } from '@nestjs/config';
-import type { ClientProvider } from '@nestjs/microservices';
 
-import { Module } from '@nestjs/common';
+import { Inject, Module } from '@nestjs/common';
 import { ConfigModule } from '@nestjs/config';
 import { RouterModule } from '@nestjs/core';
-import { ClientsModule, Transport } from '@nestjs/microservices';
+import { ClientProxy, ClientsModule, Transport } from '@nestjs/microservices';
 import { HealthModule } from '@ocm/shared';
 
 import { NATS_CLIENT } from './common/constants.js';
@@ -34,21 +34,14 @@ import { InvitationsModule } from './invitations/invitations.module.js';
         {
           name: NATS_CLIENT,
           inject: [natsConfig.KEY],
-          useFactory: (config: ConfigType<typeof natsConfig>) => {
-            const provider: Required<ClientProvider> = {
-              transport: Transport.NATS,
-              options: {
-                servers: config.url as string,
-              },
-            };
-
-            if ('user' in config && 'password' in config) {
-              provider.options.user = config.user as string;
-              provider.options.pass = config.password as string;
-            }
-
-            return provider;
-          },
+          useFactory: (config: ConfigType<typeof natsConfig>) => ({
+            transport: Transport.NATS,
+            options: {
+              servers: [config.url],
+              user: config.user,
+              pass: config.password,
+            },
+          }),
         },
       ],
     }),
@@ -78,4 +71,12 @@ import { InvitationsModule } from './invitations/invitations.module.js';
     ]),
   ],
 })
-export class Application {}
+export class Application implements OnApplicationBootstrap {
+  public constructor(
+    @Inject(NATS_CLIENT) private readonly client: ClientProxy,
+  ) {}
+
+  public async onApplicationBootstrap(): Promise<void> {
+    await this.client.connect();
+  }
+}
diff --git a/apps/connection-manager/src/main.ts b/apps/connection-manager/src/main.ts
index 24529e4abd0e91dc32fac0f80836a4d3d98834a9..a09508e0ff966a90dec1c104201b5cac6aefa470 100644
--- a/apps/connection-manager/src/main.ts
+++ b/apps/connection-manager/src/main.ts
@@ -1,37 +1,22 @@
 /* c8 ignore start */
 import type { ConfigType } from '@nestjs/config';
-import type { MicroserviceOptions, NatsOptions } from '@nestjs/microservices';
 
-import { VersioningType } from '@nestjs/common';
-import { ConfigService } from '@nestjs/config';
+import { Logger, VersioningType } from '@nestjs/common';
 import { NestFactory } from '@nestjs/core';
-import { Transport } from '@nestjs/microservices';
 import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
+import helmet from 'helmet';
+import { createRequire } from 'module';
+import { resolve } from 'node:path';
 
 import { Application } from './application.js';
-import { natsConfig } from './config/nats.config.js';
+import { httpConfig } from './config/http.config.js';
 
-const app = await NestFactory.create(Application);
-const configService = app.get(ConfigService);
-app.enableCors();
-
-const { url, user, password } = app.get(natsConfig.KEY) as ConfigType<
-  typeof natsConfig
->;
+const pkgPath = resolve('package.json');
+const pkg = createRequire(import.meta.url)(pkgPath);
 
-const microserviceOptions: Required<NatsOptions> = {
-  transport: Transport.NATS,
-  options: {
-    servers: [url],
-  },
-};
-
-if (user && password) {
-  microserviceOptions.options.user = user;
-  microserviceOptions.options.pass = password;
-}
+const app = await NestFactory.create(Application);
 
-app.connectMicroservice<MicroserviceOptions>(microserviceOptions);
+app.use(helmet());
 
 app.enableVersioning({
   defaultVersion: ['1'],
@@ -39,15 +24,24 @@ app.enableVersioning({
 });
 
 const swaggerConfig = new DocumentBuilder()
-  .setTitle('Gaia-X Connection Manager API')
-  .setDescription('API documentation for GAIA-X Connection Manager')
-  .setVersion('1.0')
+  .setTitle(pkg.description)
+  .setVersion(pkg.version)
   .build();
 
 const document = SwaggerModule.createDocument(app, swaggerConfig);
 
-SwaggerModule.setup('/swagger', app, document);
-await app.startAllMicroservices();
+SwaggerModule.setup('/', app, document, {
+  swaggerOptions: {
+    docExpansion: 'none',
+    tryItOutEnabled: true,
+  },
+});
+
+const { hostname, port } = app.get(httpConfig.KEY) as ConfigType<
+  typeof httpConfig
+>;
+await app.listen(port, hostname);
+
+Logger.log(`Application is running on: ${await app.getUrl()}`);
 
-await app.listen(configService.get('http.port') as number);
 /* c8 ignore stop */
diff --git a/apps/credential-manager/.env.example b/apps/credential-manager/.env.example
index 81e338c600aff9acfc4c2bd25d9bf1fd6175ac59..46fb0f12c103b103384fc98ba4fe8074572450c0 100644
--- a/apps/credential-manager/.env.example
+++ b/apps/credential-manager/.env.example
@@ -1,6 +1,6 @@
-HTTP_HOST=0.0.0.0
-HTTP_PORT=3003
+HTTP_HOSTNAME=0.0.0.0
+HTTP_PORT=4003
 NATS_URL=nats://localhost:4222
 NATS_USER=nats_user
-NATS_PASSWORD=
+NATS_PASSWORD=nats_password
 NATS_MONITORING_URL=http://localhost:8222
diff --git a/apps/credential-manager/package.json b/apps/credential-manager/package.json
index f245d888226d923ef8d7884aaa37dd6ec0410f71..7dfea6dda5e06b3ca975f9a77e0bebd35b088eb2 100644
--- a/apps/credential-manager/package.json
+++ b/apps/credential-manager/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@ocm/credential-manager",
   "version": "1.0.0",
-  "description": "",
+  "description": "Gaia-X OCM Credential Manager",
   "author": "Konstantin Tsabolov <konstantin.tsabolov@spherity.com>",
   "contributors": [
     "Konstantin Tsabolov <konstantin.tsabolov@spherity.com>"
@@ -27,6 +27,7 @@
     "class-transformer": "^0.5.1",
     "class-validator": "^0.14.0",
     "express": "^4.17.3",
+    "helmet": "^7.1.0",
     "joi": "^17.11.0",
     "nats": "^2.18.0",
     "reflect-metadata": "^0.1.13",
diff --git a/apps/credential-manager/src/application.ts b/apps/credential-manager/src/application.ts
index 63c7fd403029aad3d75db865983e76124b24169d..e32627c25910999219ed230ef5e2c0c51ed845d7 100644
--- a/apps/credential-manager/src/application.ts
+++ b/apps/credential-manager/src/application.ts
@@ -1,10 +1,10 @@
+import type { OnApplicationBootstrap } from '@nestjs/common';
 import type { ConfigType } from '@nestjs/config';
-import type { ClientProvider } from '@nestjs/microservices';
 
-import { Module } from '@nestjs/common';
+import { Inject, Module } from '@nestjs/common';
 import { ConfigModule } from '@nestjs/config';
 import { RouterModule } from '@nestjs/core';
-import { ClientsModule, Transport } from '@nestjs/microservices';
+import { ClientProxy, ClientsModule, Transport } from '@nestjs/microservices';
 import { HealthModule } from '@ocm/shared';
 
 import { NATS_CLIENT } from './common/constants.js';
@@ -35,18 +35,14 @@ import { CredentialsModule } from './credentials/credentials.module.js';
         {
           name: NATS_CLIENT,
           inject: [natsConfig.KEY],
-          useFactory: (config: ConfigType<typeof natsConfig>) => {
-            const provider: Required<ClientProvider> = {
-              transport: Transport.NATS,
-              options: {
-                servers: [config.url],
-                user: config.user as string,
-                pass: config.password as string,
-              },
-            };
-
-            return provider;
-          },
+          useFactory: (config: ConfigType<typeof natsConfig>) => ({
+            transport: Transport.NATS,
+            options: {
+              servers: [config.url],
+              user: config.user as string,
+              pass: config.password as string,
+            },
+          }),
         },
       ],
     }),
@@ -78,4 +74,12 @@ import { CredentialsModule } from './credentials/credentials.module.js';
     ]),
   ],
 })
-export class Application {}
+export class Application implements OnApplicationBootstrap {
+  public constructor(
+    @Inject(NATS_CLIENT) private readonly client: ClientProxy,
+  ) {}
+
+  public async onApplicationBootstrap(): Promise<void> {
+    await this.client.connect();
+  }
+}
diff --git a/apps/credential-manager/src/main.ts b/apps/credential-manager/src/main.ts
index f2780c9feed00fd4c0b976d5d7dcd21e5f3acbd4..e926eb71b8974e653e16cfc7f2f68901303e2825 100644
--- a/apps/credential-manager/src/main.ts
+++ b/apps/credential-manager/src/main.ts
@@ -1,36 +1,22 @@
 /* c8 ignore start */
 import type { ConfigType } from '@nestjs/config';
-import type { MicroserviceOptions, NatsOptions } from '@nestjs/microservices';
 
 import { Logger, VersioningType } from '@nestjs/common';
 import { NestFactory } from '@nestjs/core';
-import { Transport } from '@nestjs/microservices';
 import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
+import helmet from 'helmet';
+import { createRequire } from 'module';
+import { resolve } from 'node:path';
 
 import { Application } from './application.js';
 import { httpConfig } from './config/http.config.js';
-import { natsConfig } from './config/nats.config.js';
 
-const app = await NestFactory.create(Application);
-app.enableCors();
-
-const { url, user, password } = app.get(natsConfig.KEY) as ConfigType<
-  typeof natsConfig
->;
-
-const microserviceOptions: Required<NatsOptions> = {
-  transport: Transport.NATS,
-  options: {
-    servers: [url],
-  },
-};
+const pkgPath = resolve('package.json');
+const pkg = createRequire(import.meta.url)(pkgPath);
 
-if (user && password) {
-  microserviceOptions.options.user = user;
-  microserviceOptions.options.pass = password;
-}
+const app = await NestFactory.create(Application);
 
-app.connectMicroservice<MicroserviceOptions>(microserviceOptions);
+app.use(helmet());
 
 app.enableVersioning({
   defaultVersion: ['1'],
@@ -38,18 +24,23 @@ app.enableVersioning({
 });
 
 const swaggerConfig = new DocumentBuilder()
-  .setTitle('Gaia-X OCM Credential Manager API')
-  .setDescription('API documentation for Gaia-X OCM Credential Manager')
-  .setVersion('1.0')
+  .setTitle(pkg.description)
+  .setVersion(pkg.version)
   .build();
 
 const document = SwaggerModule.createDocument(app, swaggerConfig);
 
-SwaggerModule.setup('/swagger', app, document);
-await app.startAllMicroservices();
+SwaggerModule.setup('/', app, document, {
+  swaggerOptions: {
+    docExpansion: 'none',
+    tryItOutEnabled: true,
+  },
+});
 
-const { host, port } = app.get(httpConfig.KEY) as ConfigType<typeof httpConfig>;
-await app.listen(port as number, host as string);
+const { hostname, port } = app.get(httpConfig.KEY) as ConfigType<
+  typeof httpConfig
+>;
+await app.listen(port, hostname);
 
 Logger.log(`Application is running on: ${await app.getUrl()}`);
 /* c8 ignore stop */
diff --git a/apps/did-manager/.env.example b/apps/did-manager/.env.example
new file mode 100644
index 0000000000000000000000000000000000000000..dfef64c27b6f38797f02d77f266bb6c44de4ff5f
--- /dev/null
+++ b/apps/did-manager/.env.example
@@ -0,0 +1,6 @@
+HTTP_HOSTNAME=0.0.0.0
+HTTP_PORT=4006
+NATS_URL=nats://localhost:4222
+NATS_USER=nats_user
+NATS_PASSWORD=nats_password
+NATS_MONITORING_URL=http://localhost:8222
diff --git a/apps/did-manager/package.json b/apps/did-manager/package.json
index 669db0a31c33af6771afadff248bd04fc512c268..c20134a2b22ea593088709062417c57f9826f5a3 100644
--- a/apps/did-manager/package.json
+++ b/apps/did-manager/package.json
@@ -27,6 +27,7 @@
     "class-transformer": "^0.5.1",
     "class-validator": "^0.14.0",
     "express": "^4.17.3",
+    "helmet": "^7.1.0",
     "joi": "^17.11.0",
     "nats": "^2.18.0",
     "reflect-metadata": "^0.1.13",
diff --git a/apps/did-manager/src/application.ts b/apps/did-manager/src/application.ts
index 8e4cea804ed728210217f9abc5f24645c6de7d23..81185d0e1262e5211a18e3884e059b4d66fefd6c 100644
--- a/apps/did-manager/src/application.ts
+++ b/apps/did-manager/src/application.ts
@@ -1,10 +1,10 @@
+import type { OnApplicationBootstrap } from '@nestjs/common';
 import type { ConfigType } from '@nestjs/config';
-import type { ClientProvider } from '@nestjs/microservices';
 
-import { Module } from '@nestjs/common';
+import { Inject, Module } from '@nestjs/common';
 import { ConfigModule } from '@nestjs/config';
 import { RouterModule } from '@nestjs/core';
-import { ClientsModule, Transport } from '@nestjs/microservices';
+import { ClientProxy, ClientsModule, Transport } from '@nestjs/microservices';
 import { HealthModule } from '@ocm/shared';
 
 import { NATS_CLIENT } from './common/constants.js';
@@ -33,21 +33,14 @@ import { DIDsModule } from './dids/dids.module.js';
         {
           name: NATS_CLIENT,
           inject: [natsConfig.KEY],
-          useFactory: (config: ConfigType<typeof natsConfig>) => {
-            const provider: Required<ClientProvider> = {
-              transport: Transport.NATS,
-              options: {
-                servers: config.url as string,
-              },
-            };
-
-            if ('user' in config && 'password' in config) {
-              provider.options.user = config.user as string;
-              provider.options.pass = config.password as string;
-            }
-
-            return provider;
-          },
+          useFactory: (config: ConfigType<typeof natsConfig>) => ({
+            transport: Transport.NATS,
+            options: {
+              servers: [config.url],
+              user: config.user as string,
+              pass: config.password as string,
+            },
+          }),
         },
       ],
     }),
@@ -75,4 +68,12 @@ import { DIDsModule } from './dids/dids.module.js';
     ]),
   ],
 })
-export class Application {}
+export class Application implements OnApplicationBootstrap {
+  public constructor(
+    @Inject(NATS_CLIENT) private readonly client: ClientProxy,
+  ) {}
+
+  public async onApplicationBootstrap(): Promise<void> {
+    await this.client.connect();
+  }
+}
diff --git a/apps/did-manager/src/main.ts b/apps/did-manager/src/main.ts
index fa521d4f2bbaf856fcbbf34f8db9558e730fa760..e926eb71b8974e653e16cfc7f2f68901303e2825 100644
--- a/apps/did-manager/src/main.ts
+++ b/apps/did-manager/src/main.ts
@@ -1,36 +1,22 @@
 /* c8 ignore start */
 import type { ConfigType } from '@nestjs/config';
-import type { MicroserviceOptions, NatsOptions } from '@nestjs/microservices';
 
 import { Logger, VersioningType } from '@nestjs/common';
 import { NestFactory } from '@nestjs/core';
-import { Transport } from '@nestjs/microservices';
 import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
+import helmet from 'helmet';
+import { createRequire } from 'module';
+import { resolve } from 'node:path';
 
 import { Application } from './application.js';
 import { httpConfig } from './config/http.config.js';
-import { natsConfig } from './config/nats.config.js';
 
-const app = await NestFactory.create(Application);
-app.enableCors();
-
-const { url, user, password } = app.get(natsConfig.KEY) as ConfigType<
-  typeof natsConfig
->;
-
-const microserviceOptions: Required<NatsOptions> = {
-  transport: Transport.NATS,
-  options: {
-    servers: [url],
-  },
-};
+const pkgPath = resolve('package.json');
+const pkg = createRequire(import.meta.url)(pkgPath);
 
-if (user && password) {
-  microserviceOptions.options.user = user;
-  microserviceOptions.options.pass = password;
-}
+const app = await NestFactory.create(Application);
 
-app.connectMicroservice<MicroserviceOptions>(microserviceOptions);
+app.use(helmet());
 
 app.enableVersioning({
   defaultVersion: ['1'],
@@ -38,18 +24,23 @@ app.enableVersioning({
 });
 
 const swaggerConfig = new DocumentBuilder()
-  .setTitle('Gaia-X OCM DID Manager API')
-  .setDescription('API documentation for Gaia-X OCM DID Manager')
-  .setVersion('1.0')
+  .setTitle(pkg.description)
+  .setVersion(pkg.version)
   .build();
 
 const document = SwaggerModule.createDocument(app, swaggerConfig);
 
-SwaggerModule.setup('/', app, document);
-await app.startAllMicroservices();
+SwaggerModule.setup('/', app, document, {
+  swaggerOptions: {
+    docExpansion: 'none',
+    tryItOutEnabled: true,
+  },
+});
 
-const { host, port } = app.get(httpConfig.KEY) as ConfigType<typeof httpConfig>;
-await app.listen(port as number, host as string);
+const { hostname, port } = app.get(httpConfig.KEY) as ConfigType<
+  typeof httpConfig
+>;
+await app.listen(port, hostname);
 
 Logger.log(`Application is running on: ${await app.getUrl()}`);
 /* c8 ignore stop */
diff --git a/apps/proof-manager/.env.example b/apps/proof-manager/.env.example
index f56f87942e14ee6bda9ba33660519876302c0bae..0bdd0d9dcb57e89982350e75a8f6afb0e19fcf8f 100644
--- a/apps/proof-manager/.env.example
+++ b/apps/proof-manager/.env.example
@@ -1,6 +1,6 @@
-HTTP_HOST=0.0.0.0
-HTTP_PORT=3004
+HTTP_HOSTNAME=0.0.0.0
+HTTP_PORT=4004
 NATS_URL=nats://localhost:4222
 NATS_USER=nats_user
-NATS_PASSWORD=
+NATS_PASSWORD=nats_password
 NATS_MONITORING_URL=http://localhost:8222
diff --git a/apps/proof-manager/package.json b/apps/proof-manager/package.json
index 931642ddd3b2fadaaf9de7f37c3571d1283b0faf..1026009cfca0fed13b122d149b22ced3cdd6ff01 100644
--- a/apps/proof-manager/package.json
+++ b/apps/proof-manager/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@ocm/proof-manager",
-  "version": "0.0.1",
-  "description": "The Proof Manager provides an endpoint to request a presentation over an existing connection",
+  "version": "1.0.0",
+  "description": "Gaia-X OCM Proof Manager",
   "author": "Sagar",
   "private": true,
   "license": "Apache-2.0",
@@ -22,9 +22,10 @@
     "@nestjs/platform-express": "^10.3.0",
     "@nestjs/swagger": "^7.1.16",
     "@ocm/shared": "workspace:*",
-    "class-validator": "^0.14.0",
     "class-transformer": "^0.5.1",
+    "class-validator": "^0.14.0",
     "express": "^4.17.3",
+    "helmet": "^7.1.0",
     "joi": "^17.11.0",
     "nats": "^2.18.0",
     "reflect-metadata": "^0.1.13",
diff --git a/apps/proof-manager/src/application.ts b/apps/proof-manager/src/application.ts
index 19c04cbeff2a12c83f65e00bb7afb213a452fa8e..ffc45aa9309264c3f410d6388e5b28435904a22e 100644
--- a/apps/proof-manager/src/application.ts
+++ b/apps/proof-manager/src/application.ts
@@ -1,10 +1,10 @@
+import type { OnApplicationBootstrap } from '@nestjs/common';
 import type { ConfigType } from '@nestjs/config';
-import type { ClientProvider } from '@nestjs/microservices';
 
-import { Module } from '@nestjs/common';
+import { Inject, Module } from '@nestjs/common';
 import { ConfigModule } from '@nestjs/config';
 import { RouterModule } from '@nestjs/core';
-import { ClientsModule, Transport } from '@nestjs/microservices';
+import { ClientProxy, ClientsModule, Transport } from '@nestjs/microservices';
 import { HealthModule } from '@ocm/shared';
 
 import { NATS_CLIENT } from './common/constants.js';
@@ -33,21 +33,14 @@ import { ProofsModule } from './proofs/proofs.module.js';
         {
           name: NATS_CLIENT,
           inject: [natsConfig.KEY],
-          useFactory: (config: ConfigType<typeof natsConfig>) => {
-            const provider: Required<ClientProvider> = {
-              transport: Transport.NATS,
-              options: {
-                servers: config.url as string,
-              },
-            };
-
-            if ('user' in config && 'password' in config) {
-              provider.options.user = config.user as string;
-              provider.options.pass = config.password as string;
-            }
-
-            return provider;
-          },
+          useFactory: (config: ConfigType<typeof natsConfig>) => ({
+            transport: Transport.NATS,
+            options: {
+              servers: [config.url],
+              user: config.user as string,
+              pass: config.password as string,
+            },
+          }),
         },
       ],
     }),
@@ -75,4 +68,12 @@ import { ProofsModule } from './proofs/proofs.module.js';
     ]),
   ],
 })
-export class Application {}
+export class Application implements OnApplicationBootstrap {
+  public constructor(
+    @Inject(NATS_CLIENT) private readonly client: ClientProxy,
+  ) {}
+
+  public async onApplicationBootstrap(): Promise<void> {
+    await this.client.connect();
+  }
+}
diff --git a/apps/proof-manager/src/main.ts b/apps/proof-manager/src/main.ts
index fe4aad77a459145c7ef815eca71bfe48154f47c7..e926eb71b8974e653e16cfc7f2f68901303e2825 100644
--- a/apps/proof-manager/src/main.ts
+++ b/apps/proof-manager/src/main.ts
@@ -1,36 +1,22 @@
 /* c8 ignore start */
 import type { ConfigType } from '@nestjs/config';
-import type { MicroserviceOptions, NatsOptions } from '@nestjs/microservices';
 
 import { Logger, VersioningType } from '@nestjs/common';
 import { NestFactory } from '@nestjs/core';
-import { Transport } from '@nestjs/microservices';
 import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
+import helmet from 'helmet';
+import { createRequire } from 'module';
+import { resolve } from 'node:path';
 
 import { Application } from './application.js';
 import { httpConfig } from './config/http.config.js';
-import { natsConfig } from './config/nats.config.js';
 
-const app = await NestFactory.create(Application);
-app.enableCors();
-
-const { url, user, password } = app.get(natsConfig.KEY) as ConfigType<
-  typeof natsConfig
->;
-
-const microserviceOptions: Required<NatsOptions> = {
-  transport: Transport.NATS,
-  options: {
-    servers: [url],
-  },
-};
+const pkgPath = resolve('package.json');
+const pkg = createRequire(import.meta.url)(pkgPath);
 
-if (user && password) {
-  microserviceOptions.options.user = user;
-  microserviceOptions.options.pass = password;
-}
+const app = await NestFactory.create(Application);
 
-app.connectMicroservice<MicroserviceOptions>(microserviceOptions);
+app.use(helmet());
 
 app.enableVersioning({
   defaultVersion: ['1'],
@@ -38,18 +24,23 @@ app.enableVersioning({
 });
 
 const swaggerConfig = new DocumentBuilder()
-  .setTitle('Gaia-X OCM Proof Manager API')
-  .setDescription('API documentation for Gaia-X OCM Proof Manager')
-  .setVersion('1.0')
+  .setTitle(pkg.description)
+  .setVersion(pkg.version)
   .build();
 
 const document = SwaggerModule.createDocument(app, swaggerConfig);
 
-SwaggerModule.setup('/swagger', app, document);
-await app.startAllMicroservices();
+SwaggerModule.setup('/', app, document, {
+  swaggerOptions: {
+    docExpansion: 'none',
+    tryItOutEnabled: true,
+  },
+});
 
-const { host, port } = app.get(httpConfig.KEY) as ConfigType<typeof httpConfig>;
-await app.listen(port as number, host as string);
+const { hostname, port } = app.get(httpConfig.KEY) as ConfigType<
+  typeof httpConfig
+>;
+await app.listen(port, hostname);
 
 Logger.log(`Application is running on: ${await app.getUrl()}`);
 /* c8 ignore stop */
diff --git a/apps/schema-manager/.env.example b/apps/schema-manager/.env.example
index 55e246f00ca84b18a51876fef8c6a8f4d51f7977..e6e793587ef607b5eefd3ffec3d77ed4365df661 100644
--- a/apps/schema-manager/.env.example
+++ b/apps/schema-manager/.env.example
@@ -1,6 +1,6 @@
-HTTP_HOST=0.0.0.0
-HTTP_PORT=3001
+HTTP_HOSTNAME=0.0.0.0
+HTTP_PORT=4001
 NATS_URL=nats://localhost:4222
 NATS_USER=nats_user
-NATS_PASSWORD=
+NATS_PASSWORD=nats_password
 NATS_MONITORING_URL=http://localhost:8222
diff --git a/apps/schema-manager/package.json b/apps/schema-manager/package.json
index 4e08b78610ae1df67995e488efa8e2d5cab925c0..748940be499c878a8265ac9691d0342616b8c1cf 100644
--- a/apps/schema-manager/package.json
+++ b/apps/schema-manager/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@ocm/schema-manager",
   "version": "1.0.0",
-  "description": "",
+  "description": "Gaia-X OCM Schema Manager",
   "author": "Konstantin Tsabolov <konstantin.tsabolov@spherity.com>",
   "contributors": [
     "Konstantin Tsabolov <konstantin.tsabolov@spherity.com>"
@@ -27,6 +27,7 @@
     "class-transformer": "^0.5.1",
     "class-validator": "^0.14.0",
     "express": "^4.17.3",
+    "helmet": "^7.1.0",
     "joi": "^17.11.0",
     "nats": "^2.18.0",
     "reflect-metadata": "^0.1.13",
diff --git a/apps/schema-manager/src/application.ts b/apps/schema-manager/src/application.ts
index 649befb0bbd02c54270efac362ca21e4fe136dfc..b67928ff8f26c65974a096e729142130d881ccb3 100644
--- a/apps/schema-manager/src/application.ts
+++ b/apps/schema-manager/src/application.ts
@@ -1,10 +1,10 @@
+import type { OnApplicationBootstrap } from '@nestjs/common';
 import type { ConfigType } from '@nestjs/config';
-import type { ClientProvider } from '@nestjs/microservices';
 
-import { Module } from '@nestjs/common';
+import { Inject, Module } from '@nestjs/common';
 import { ConfigModule } from '@nestjs/config';
 import { RouterModule } from '@nestjs/core';
-import { ClientsModule, Transport } from '@nestjs/microservices';
+import { ClientProxy, ClientsModule, Transport } from '@nestjs/microservices';
 import { HealthModule } from '@ocm/shared';
 
 import { NATS_CLIENT } from './common/constants.js';
@@ -34,21 +34,14 @@ import { SchemasModule } from './schemas/schemas.module.js';
         {
           name: NATS_CLIENT,
           inject: [natsConfig.KEY],
-          useFactory: (config: ConfigType<typeof natsConfig>) => {
-            const provider: Required<ClientProvider> = {
-              transport: Transport.NATS,
-              options: {
-                servers: config.url as string,
-              },
-            };
-
-            if ('user' in config && 'password' in config) {
-              provider.options.user = config.user as string;
-              provider.options.pass = config.password as string;
-            }
-
-            return provider;
-          },
+          useFactory: (config: ConfigType<typeof natsConfig>) => ({
+            transport: Transport.NATS,
+            options: {
+              servers: [config.url],
+              user: config.user as string,
+              pass: config.password as string,
+            },
+          }),
         },
       ],
     }),
@@ -78,4 +71,12 @@ import { SchemasModule } from './schemas/schemas.module.js';
     ]),
   ],
 })
-export class Application {}
+export class Application implements OnApplicationBootstrap {
+  public constructor(
+    @Inject(NATS_CLIENT) private readonly client: ClientProxy,
+  ) {}
+
+  public async onApplicationBootstrap(): Promise<void> {
+    await this.client.connect();
+  }
+}
diff --git a/apps/schema-manager/src/main.ts b/apps/schema-manager/src/main.ts
index 1472b8cdfd8627cd9ff0aab52e2dc625bb10022e..e926eb71b8974e653e16cfc7f2f68901303e2825 100644
--- a/apps/schema-manager/src/main.ts
+++ b/apps/schema-manager/src/main.ts
@@ -1,36 +1,22 @@
 /* c8 ignore start */
 import type { ConfigType } from '@nestjs/config';
-import type { MicroserviceOptions, NatsOptions } from '@nestjs/microservices';
 
 import { Logger, VersioningType } from '@nestjs/common';
 import { NestFactory } from '@nestjs/core';
-import { Transport } from '@nestjs/microservices';
 import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
+import helmet from 'helmet';
+import { createRequire } from 'module';
+import { resolve } from 'node:path';
 
 import { Application } from './application.js';
 import { httpConfig } from './config/http.config.js';
-import { natsConfig } from './config/nats.config.js';
 
-const app = await NestFactory.create(Application);
-app.enableCors();
-
-const { url, user, password } = app.get(natsConfig.KEY) as ConfigType<
-  typeof natsConfig
->;
-
-const microserviceOptions: Required<NatsOptions> = {
-  transport: Transport.NATS,
-  options: {
-    servers: [url],
-  },
-};
+const pkgPath = resolve('package.json');
+const pkg = createRequire(import.meta.url)(pkgPath);
 
-if (user && password) {
-  microserviceOptions.options.user = user;
-  microserviceOptions.options.pass = password;
-}
+const app = await NestFactory.create(Application);
 
-app.connectMicroservice<MicroserviceOptions>(microserviceOptions);
+app.use(helmet());
 
 app.enableVersioning({
   defaultVersion: ['1'],
@@ -38,18 +24,23 @@ app.enableVersioning({
 });
 
 const swaggerConfig = new DocumentBuilder()
-  .setTitle('Gaia-X OCM Schema Manager API')
-  .setDescription('API documentation for Gaia-X OCM Schema Manager')
-  .setVersion('1.0')
+  .setTitle(pkg.description)
+  .setVersion(pkg.version)
   .build();
 
 const document = SwaggerModule.createDocument(app, swaggerConfig);
 
-SwaggerModule.setup('/swagger', app, document);
-await app.startAllMicroservices();
+SwaggerModule.setup('/', app, document, {
+  swaggerOptions: {
+    docExpansion: 'none',
+    tryItOutEnabled: true,
+  },
+});
 
-const { host, port } = app.get(httpConfig.KEY) as ConfigType<typeof httpConfig>;
-await app.listen(port as number, host as string);
+const { hostname, port } = app.get(httpConfig.KEY) as ConfigType<
+  typeof httpConfig
+>;
+await app.listen(port, hostname);
 
 Logger.log(`Application is running on: ${await app.getUrl()}`);
 /* c8 ignore stop */