diff --git a/setup.py b/setup.py
index 7c6f2eb..acd0941 100755
--- a/setup.py
+++ b/setup.py
@@ -1,74 +1,76 @@
 #!/usr/bin/env python3
 # Copyright (C) 2015-2018  The Software Heritage developers
 # See the AUTHORS file at the top-level directory of this distribution
 # License: GNU General Public License version 3, or any later version
 # See top-level LICENSE file for more information
 
 from setuptools import setup, find_packages
 
 from os import path
 from io import open
 
 here = path.abspath(path.dirname(__file__))
 
 # Get the long description from the README file
 with open(path.join(here, 'README.md'), encoding='utf-8') as f:
     long_description = f.read()
 
 
 def parse_requirements(name=None):
     if name:
         reqf = 'requirements-%s.txt' % name
     else:
         reqf = 'requirements.txt'
 
     requirements = []
     if not path.exists(reqf):
         return requirements
 
     with open(reqf) as f:
         for line in f.readlines():
             line = line.strip()
             if not line or line.startswith('#'):
                 continue
             requirements.append(line)
     return requirements
 
 
 setup(
     name='swh.storage',
     description='Software Heritage storage manager',
     long_description=long_description,
     long_description_content_type='text/markdown',
     author='Software Heritage developers',
     author_email='swh-devel@inria.fr',
     url='https://forge.softwareheritage.org/diffusion/DSTO/',
     packages=find_packages(),
     scripts=[
         'bin/swh-storage-add-dir',
     ],
     entry_points='''
         [console_scripts]
         swh-storage=swh.storage.cli:main
+        [swh.cli.subcommands]
+        storage=swh.storage.cli:storage
     ''',
     setup_requires=['vcversioner'],
     install_requires=parse_requirements() + parse_requirements('swh'),
     extras_require={
         'testing': parse_requirements('test'),
         'schemata': ['SQLAlchemy'],
     },
     vcversioner={},
     include_package_data=True,
     classifiers=[
         "Programming Language :: Python :: 3",
         "Intended Audience :: Developers",
         "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
         "Operating System :: OS Independent",
         "Development Status :: 5 - Production/Stable",
     ],
     project_urls={
         'Bug Reports': 'https://forge.softwareheritage.org/maniphest',
         'Funding': 'https://www.softwareheritage.org/donate',
         'Source': 'https://forge.softwareheritage.org/source/swh-storage',
     },
 )
diff --git a/swh/storage/cli.py b/swh/storage/cli.py
index 42bbf9f..37f6c89 100644
--- a/swh/storage/cli.py
+++ b/swh/storage/cli.py
@@ -1,25 +1,44 @@
 # Copyright (C) 2015-2019  The Software Heritage developers
 # See the AUTHORS file at the top-level directory of this distribution
 # License: GNU General Public License version 3, or any later version
 # See top-level LICENSE file for more information
 
+import logging
+
 import click
 
+from swh.core.cli import CONTEXT_SETTINGS
 from swh.storage.api.server import load_and_check_config, app
 
 
-@click.command()
+@click.group(name='storage', context_settings=CONTEXT_SETTINGS)
+@click.pass_context
+def storage(ctx):
+    '''Software Heritage Storage tools.'''
+    pass
+
+
+@storage.command(name='rpc-serve')
 @click.argument('config-path', required=1)
 @click.option('--host', default='0.0.0.0', help="Host to run the server")
 @click.option('--port', default=5002, type=click.INT,
               help="Binding port of the server")
-@click.option('--debug/--nodebug', default=True,
+@click.option('--debug/--no-debug', default=True,
               help="Indicates if the server should run in debug mode")
-def main(config_path, host, port, debug):
+def serve(config_path, host, port, debug):
+    '''Software Heritage Storage RPC (standalone) server.
+
+    Do NOT use this in a production environment.
+    '''
     api_cfg = load_and_check_config(config_path, type='any')
     app.config.update(api_cfg)
     app.run(host, port=int(port), debug=bool(debug))
 
 
+def main():
+    logging.basicConfig()
+    return serve(auto_envvar_prefix='SWH_STORAGE')
+
+
 if __name__ == '__main__':
     main()