diff --git a/multisite_manager_tool.info.yml b/multisite_manager_tool.info.yml
index 751a7cc..5f8df4b 100644
--- a/multisite_manager_tool.info.yml
+++ b/multisite_manager_tool.info.yml
@@ -1,4 +1,4 @@
 name: 'Multisite Manager Tool'
 type: module
 description: 'Designed to simplify the management of multisite installations.'
-core_version_requirement: ^10 || ^11
+core_version_requirement: ^10.1 || ^11 || ^12
diff --git a/multisite_manager_tool.module b/multisite_manager_tool.module
index dbb5c9d..32810fc 100644
--- a/multisite_manager_tool.module
+++ b/multisite_manager_tool.module
@@ -5,18 +5,14 @@
  * Hook implementations for the Multisite Manager Tool module.
  */
 
+use Drupal\Core\Hook\Attribute\LegacyHook;
+use Drupal\multisite_manager_tool\Hook\MultisiteManagerToolHooks;
 use Drupal\Core\Routing\RouteMatchInterface;
 
 /**
  * Implements hook_help().
  */
+#[LegacyHook]
 function multisite_manager_tool_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    // Main module help for the content_moderation module.
-    case 'help.page.multisite_manager_tool':
-      $output = '';
-      $output .= '<h2>' . t('About') . '</h2>';
-      $output .= '<p>' . t('The Multisite Manager Tool module allows you to manage multisite feature as clear caches') . '</p>';
-      return $output;
-  }
+  return \Drupal::service(MultisiteManagerToolHooks::class)->help($route_name, $route_match);
 }
diff --git a/multisite_manager_tool.services.yml b/multisite_manager_tool.services.yml
index bed72b3..a1207ca 100644
--- a/multisite_manager_tool.services.yml
+++ b/multisite_manager_tool.services.yml
@@ -6,3 +6,7 @@ services:
   settings_file_parser:
     class: Drupal\multisite_manager_tool\SettingsFileParser
     arguments: ['@logger.factory']
+
+  Drupal\multisite_manager_tool\Hook\MultisiteManagerToolHooks:
+    class: Drupal\multisite_manager_tool\Hook\MultisiteManagerToolHooks
+    autowire: true
diff --git a/src/Hook/MultisiteManagerToolHooks.php b/src/Hook/MultisiteManagerToolHooks.php
new file mode 100644
index 0000000..5e5ea59
--- /dev/null
+++ b/src/Hook/MultisiteManagerToolHooks.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\multisite_manager_tool\Hook;
+
+use Drupal\Core\Routing\RouteMatchInterface;
+use Drupal\Core\Hook\Attribute\Hook;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+
+/**
+ * Hook implementations for multisite_manager_tool.
+ */
+class MultisiteManagerToolHooks {
+  use StringTranslationTrait;
+
+  /**
+   * Implements hook_help().
+   */
+  #[Hook('help')]
+  public function help($route_name, RouteMatchInterface $route_match) {
+    switch ($route_name) {
+      // Main module help for the content_moderation module.
+      case 'help.page.multisite_manager_tool':
+        $output = '';
+        $output .= '<h2>' . $this->t('About') . '</h2>';
+        $output .= '<p>' . $this->t('The Multisite Manager Tool module allows you to manage multisite feature as clear caches') . '</p>';
+        return $output;
+    }
+  }
+
+}
diff --git a/tests/src/Unit/SettingsFileParserTest.php b/tests/src/Unit/SettingsFileParserTest.php
index 9ebe1cc..0221376 100644
--- a/tests/src/Unit/SettingsFileParserTest.php
+++ b/tests/src/Unit/SettingsFileParserTest.php
@@ -46,7 +46,6 @@ class SettingsFileParserTest extends UnitTestCase {
   public function testExtractDatabaseNameWithSingleQuotes(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractDatabaseName');
-    $method->setAccessible(TRUE);
 
     $content = <<<PHP
 \$databases['default']['default'] = [
@@ -65,7 +64,6 @@ PHP;
   public function testExtractDatabaseNameWithDoubleQuotes(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractDatabaseName');
-    $method->setAccessible(TRUE);
 
     $content = <<<PHP
 \$databases['default']['default'] = [
@@ -87,7 +85,6 @@ PHP;
   public function testExtractDatabaseNameIgnoresCommentedExamples(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractDatabaseName');
-    $method->setAccessible(TRUE);
 
     // Simulates a settings.php with a doc-comment example before the real config.
     $content = <<<PHP
@@ -117,7 +114,6 @@ PHP;
   public function testExtractDatabaseNameFromEnvVariable(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractDatabaseName');
-    $method->setAccessible(TRUE);
 
     putenv('DB_NAME=env_database');
 
@@ -140,7 +136,6 @@ PHP;
   public function testExtractDatabaseNameFromEnvVariableNotSet(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractDatabaseName');
-    $method->setAccessible(TRUE);
 
     putenv('DB_NAME');
 
@@ -161,7 +156,6 @@ PHP;
   public function testExtractDatabaseNameFromVariableAssignedInConditional(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractDatabaseName');
-    $method->setAccessible(TRUE);
 
     putenv('DATABASE_NAME');
     putenv('DB_NAME=branch_database');
@@ -204,7 +198,6 @@ PHP;
   public function testExtractDatabaseNameFromServerEnvFallback(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractDatabaseName');
-    $method->setAccessible(TRUE);
 
     putenv('DB_NAME');
     $_SERVER['DB_NAME'] = 'server_database';
@@ -228,7 +221,6 @@ PHP;
   public function testExtractDefaultDatabaseSettingsArrayUsesLastMatch(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractDefaultDatabaseSettingsArray');
-    $method->setAccessible(TRUE);
 
     $content = <<<PHP
 \$databases['default']['default'] = [
@@ -252,7 +244,6 @@ PHP;
   public function testExtractDefaultDatabaseSettingsArrayIgnoresComments(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractDefaultDatabaseSettingsArray');
-    $method->setAccessible(TRUE);
 
     $content = <<<PHP
 /*
@@ -277,7 +268,6 @@ PHP;
   public function testExtractDatabaseNameNotFound(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractDatabaseName');
-    $method->setAccessible(TRUE);
 
     $content = 'Some content without database config';
     $result = $method->invoke($this->parser, $content);
@@ -290,7 +280,6 @@ PHP;
   public function testExtractTablePrefixPresent(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractTablePrefix');
-    $method->setAccessible(TRUE);
 
     $content = <<<PHP
 \$databases['default']['default'] = [
@@ -309,7 +298,6 @@ PHP;
   public function testExtractTablePrefixAbsent(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractTablePrefix');
-    $method->setAccessible(TRUE);
 
     $content = <<<PHP
 \$databases['default']['default'] = [
@@ -327,7 +315,6 @@ PHP;
   public function testExtractTablePrefixEmpty(): void {
     $reflection = new \ReflectionClass($this->parser);
     $method = $reflection->getMethod('extractTablePrefix');
-    $method->setAccessible(TRUE);
 
     $content = <<<PHP
 \$databases['default']['default'] = [
