diff --git a/rbtools/api/capabilities.py b/rbtools/api/capabilities.py
index 25f4edade2a6d72b73a5824585bc650bcd91fb11..b7c04ab8f2f1439aa4ec8521ede0626e70caaf6b 100644
--- a/rbtools/api/capabilities.py
+++ b/rbtools/api/capabilities.py
@@ -1,24 +1,53 @@
-from __future__ import unicode_literals
+"""Review Board server capability management."""
 
+from typing import Dict
 
-class Capabilities(object):
-    """Stores and retrieves Review Board server capabilities."""
 
-    def __init__(self, capabilities):
+class Capabilities:
+    """Provides information on Review Board server capabilities."""
+
+    #: The dictionary of capabilities from the Review Board API.
+    #:
+    #: Type:
+    #:     dict
+    capabilities: Dict
+
+    def __init__(
+        self,
+        capabilities: Dict,
+    ) -> None:
+        """Initialize the capabilities information.
+
+        Args:
+            capabilities (dict):
+                The capabilities dictionary from the server.
+        """
         self.capabilities = capabilities
 
-    def has_capability(self, *args):
+    def has_capability(self, *cap_path) -> bool:
+        """Return whether the server provides a given capability.
+
+        Args:
+            *cap_path (tuple of str):
+                The keys forming a path to the capability.
+
+        Returns:
+            bool:
+            ``True`` if the capability is explicitly set to ``True``. ``False``
+            if the capability is set to ``False`` or is not present in the API
+            capabilities.
+        """
         caps = self.capabilities
 
         try:
-            for arg in args:
-                caps = caps[arg]
+            for key in cap_path:
+                caps = caps[key]
 
-            # If only part of a capability path is specified, we don't want
-            # to evaluate to True just because it has contents. We want to
-            # only say we have a capability if it is indeed 'True'.
+            # If only part of a capability path is specified, we don't want to
+            # evaluate to True just because it has contents. We want to only
+            # say we have a capability if it is indeed 'True'.
             return caps is True
         except (TypeError, KeyError):
-            # The server either doesn't support the capability,
-            # or returned no capabilities at all.
+            # The server either doesn't support the capability, or returned no
+            # capabilities at all.
             return False
diff --git a/rbtools/api/tests/test_capabilities.py b/rbtools/api/tests/test_capabilities.py
index da632f50ca0acd7f09d7794ef4b0c2630fff3bf8..c24f3d33947372ebcf618440e3fbdf388ee41513 100644
--- a/rbtools/api/tests/test_capabilities.py
+++ b/rbtools/api/tests/test_capabilities.py
@@ -1,7 +1,5 @@
 """Unit tests for rbtools.api.capabilities."""
 
-from __future__ import unicode_literals
-
 from rbtools.api.capabilities import Capabilities
 from rbtools.testing import TestCase
 
diff --git a/rbtools/commands/__init__.py b/rbtools/commands/__init__.py
index 8d7114f4b2d45896920c0d7e6b91e34a460cae6d..23e61fe04cd24e3f7a1da132ebc0c64f34bd1cac 100644
--- a/rbtools/commands/__init__.py
+++ b/rbtools/commands/__init__.py
@@ -18,6 +18,7 @@ from rbtools import get_version_string
 from rbtools.api.capabilities import Capabilities
 from rbtools.api.client import RBClient
 from rbtools.api.errors import APIError, ServerInterfaceError
+from rbtools.api.resource import RootResource
 from rbtools.api.transport.sync import SyncTransport
 from rbtools.clients import scan_usable_client
 from rbtools.clients.errors import OptionsCheckError
@@ -1376,8 +1377,20 @@ class Command(object):
 
         return api_client, api_root
 
-    def get_capabilities(self, api_root):
-        """Retrieve Capabilities from the server and return them."""
+    def get_capabilities(
+        self,
+        api_root: RootResource,
+    ) -> Capabilities:
+        """Retrieve capabilities from the server and return them.
+
+        Args:
+            api_root (rbtools.api.resource.RootResource):
+                The root resource
+
+        Returns:
+            rbtools.api.capabilities.Capabilities:
+            The server capabilities.
+        """
         if 'capabilities' in api_root:
             # Review Board 2.0+ provides capabilities in the root resource.
             return Capabilities(api_root.capabilities)
