diff --git a/reviewboard/webapi/server_info.py b/reviewboard/webapi/server_info.py
index 7ab389f20e74109191836e17f94c2b9a9e8b975b..0619181f00120b076a06e5881de4657afd008bc3 100644
--- a/reviewboard/webapi/server_info.py
+++ b/reviewboard/webapi/server_info.py
@@ -9,6 +9,7 @@ from djblets.siteconfig.models import SiteConfiguration
 from reviewboard import get_version_string, get_package_version, is_release
 from reviewboard.admin.server import get_server_url
 from reviewboard.diffviewer.features import dvcs_feature
+from reviewboard.scmtools import scmtools_registry
 
 
 logger = logging.getLogger(__name__)
@@ -121,6 +122,11 @@ def get_capabilities(request=None):
     capabilities['authentication']['client_web_login'] = \
         siteconfig.get('client_web_login')
 
+    capabilities['scmtools']['supported_tools'] = sorted(
+        scmtool.scmtool_id
+        for scmtool in scmtools_registry
+    )
+
     return capabilities
 
 
diff --git a/reviewboard/webapi/tests/mixins.py b/reviewboard/webapi/tests/mixins.py
index 1456e4bff4234d215c69f24c24c1915bd2bd5fea..918a5d574d76125aee8ef8af8c12ae6f349c1c02 100644
--- a/reviewboard/webapi/tests/mixins.py
+++ b/reviewboard/webapi/tests/mixins.py
@@ -1278,7 +1278,7 @@ class BasicGetItemTestsMixin(BasicTestsMixin):
                 results with the Local Site identified by ``local_site_name``.
 
             local_site_name (str):
-                The name of the Local Site to test againt.
+                The name of the Local Site to test against.
 
                 This will be ``None`` if testing against the global site.
 
diff --git a/reviewboard/webapi/tests/test_server_info.py b/reviewboard/webapi/tests/test_server_info.py
index 379ea8bb978ecf1fd40101e26af6724e20dc4453..9b3346caf4645b72e17347080a5c1fa557bd212d 100644
--- a/reviewboard/webapi/tests/test_server_info.py
+++ b/reviewboard/webapi/tests/test_server_info.py
@@ -1,4 +1,11 @@
+"""Unit tests for the ServerInfoResource API."""
+
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, Any, Optional, Tuple
+
 from django.conf import settings
+from djblets.webapi.testing.decorators import webapi_test_template
 
 from reviewboard import get_version_string, get_package_version, is_release
 from reviewboard.admin.server import get_server_url
@@ -9,6 +16,9 @@ from reviewboard.webapi.tests.mimetypes import server_info_mimetype
 from reviewboard.webapi.tests.mixins import BasicTestsMetaclass
 from reviewboard.webapi.tests.urls import get_server_info_url
 
+if TYPE_CHECKING:
+    from django.contrib.auth.models import User
+
 
 class ResourceTests(BaseWebAPITestCase, metaclass=BasicTestsMetaclass):
     """Testing the ServerInfoResource APIs."""
@@ -51,7 +61,53 @@ class ResourceTests(BaseWebAPITestCase, metaclass=BasicTestsMetaclass):
     # HTTP GET tests
     #
 
-    def setup_basic_get_test(self, user, with_local_site, local_site_name):
+    def setup_basic_get_test(
+        self,
+        user: User,
+        with_local_site: bool,
+        local_site_name: Optional[str],
+    ) -> Tuple[str, str, Any]:
+        """Set up a basic HTTP GET unit test.
+
+        Args:
+            user (django.contrib.auth.models.User):
+                The user performing the API requests.
+
+            with_local_site (bool):
+                Whether the test is being performed on a Local Site.
+
+            local_site_name (str or None):
+                The name of the Local Site to test against.
+
+                This will be ``None`` if testing against the global site.
+
+        Returns:
+            tuple:
+            A 3-tuple of:
+
+            Tuple:
+                0 (str):
+                    The URL to the API resource to access.
+
+                1 (str):
+                    The expected mimetype of the response.
+
+                2 (object):
+                    The item to compare to in :py:meth:`compare_item`.
+        """
         return (get_server_info_url(local_site_name),
                 server_info_mimetype,
                 None)
+
+    @webapi_test_template
+    def test_get_registered_scmtools(self) -> None:
+        """Testing the GET <URL> API registered SCMTools"""
+        url, mimetype, obj = self.setup_basic_get_test(self.user, False, None)
+
+        rsp = self.api_get(url, expected_mimetype=mimetype)
+        assert rsp is not None
+
+        capabilities = rsp['info']['capabilities']
+
+        self.assertIn('git',
+                      capabilities['scmtools']['supported_tools'])
