diff --git a/libatomsparser/metainfo/__init__.py b/libatomsparser/metainfo/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..ef897a88e1150e770dff930a94f3a7be7134f4ef
--- /dev/null
+++ b/libatomsparser/metainfo/__init__.py
@@ -0,0 +1,13 @@
+import sys
+from nomad.metainfo import Environment
+from nomad.metainfo.legacy import LegacyMetainfoEnvironment
+import libatomsparser.metainfo.lib_atoms
+import nomad.datamodel.metainfo.common
+import nomad.datamodel.metainfo.public
+import nomad.datamodel.metainfo.general
+
+m_env = LegacyMetainfoEnvironment()
+m_env.m_add_sub_section(Environment.packages, sys.modules['libatomsparser.metainfo.lib_atoms'].m_package)  # type: ignore
+m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.common'].m_package)  # type: ignore
+m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.public'].m_package)  # type: ignore
+m_env.m_add_sub_section(Environment.packages, sys.modules['nomad.datamodel.metainfo.general'].m_package)  # type: ignore
diff --git a/libatomsparser/metainfo/lib_atoms.py b/libatomsparser/metainfo/lib_atoms.py
new file mode 100644
index 0000000000000000000000000000000000000000..0a374b91cec0e530cd3ff6491c09fec316f616b0
--- /dev/null
+++ b/libatomsparser/metainfo/lib_atoms.py
@@ -0,0 +1,233 @@
+import numpy as np            # pylint: disable=unused-import
+import typing                 # pylint: disable=unused-import
+from nomad.metainfo import (  # pylint: disable=unused-import
+    MSection, MCategory, Category, Package, Quantity, Section, SubSection, SectionProxy,
+    Reference
+)
+from nomad.metainfo.legacy import LegacyDefinition
+
+from nomad.datamodel.metainfo import public
+
+m_package = Package(
+    name='lib_atoms_nomadmetainfo_json',
+    description='None',
+    a_legacy=LegacyDefinition(name='lib_atoms.nomadmetainfo.json'))
+
+
+class x_lib_atoms_section_gap(MSection):
+    '''
+    Description of Gaussian Approximation Potentials (GAPs).
+    '''
+
+    m_def = Section(validate=False, a_legacy=LegacyDefinition(name='x_lib_atoms_section_gap'))
+
+    x_lib_atoms_training_config_refs = Quantity(
+        type=public.section_single_configuration_calculation,
+        shape=['n_sparseX'],
+        description='''
+        References to frames in training configuration.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_training_config_refs'))
+
+    x_lib_atoms_GAP_params_label = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_GAP_params_label'))
+
+    x_lib_atoms_GAP_params_svn_version = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_GAP_params_svn_version'))
+
+    x_lib_atoms_GAP_data_do_core = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_GAP_data_do_core'))
+
+    x_lib_atoms_GAP_data_e0 = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_GAP_data_e0'))
+
+    x_lib_atoms_command_line_command_line = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_command_line_command_line'))
+
+    x_lib_atoms_gpSparse_n_coordinate = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpSparse_n_coordinate'))
+
+    x_lib_atoms_gpCoordinates_n_permutations = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_n_permutations'))
+
+    x_lib_atoms_gpCoordinates_sparsified = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_sparsified'))
+
+    x_lib_atoms_gpCoordinates_signal_variance = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_signal_variance'))
+
+    x_lib_atoms_gpCoordinates_label = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_label'))
+
+    x_lib_atoms_gpCoordinates_n_sparseX = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_n_sparseX'))
+
+    x_lib_atoms_gpCoordinates_covariance_type = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_covariance_type'))
+
+    x_lib_atoms_gpCoordinates_signal_mean = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_signal_mean'))
+
+    x_lib_atoms_gpCoordinates_sparseX_filename = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_sparseX_filename'))
+
+    x_lib_atoms_gpCoordinates_dimensions = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_dimensions'))
+
+    x_lib_atoms_gpCoordinates_theta = Quantity(
+        type=np.dtype(np.float64),
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_theta'))
+
+    x_lib_atoms_gpCoordinates_descriptor = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_descriptor'))
+
+    x_lib_atoms_gpCoordinates_perm_permutation = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_perm_permutation'))
+
+    x_lib_atoms_gpCoordinates_perm_i = Quantity(
+        type=np.dtype(np.int32),
+        shape=[],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_perm_i'))
+
+    x_lib_atoms_gpCoordinates_alpha = Quantity(
+        type=np.dtype(np.float64),
+        shape=['n_sparseX', 2],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_alpha'))
+
+    x_lib_atoms_gpCoordinates_sparseX = Quantity(
+        type=np.dtype(np.float64),
+        shape=['n_sparseX', 'dimensions'],
+        description='''
+        GAP classifier.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_gpCoordinates_sparseX'))
+
+
+class section_run(public.section_run):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_run'))
+
+    x_lib_atoms_section_gap = SubSection(
+        sub_section=SectionProxy('x_lib_atoms_section_gap'),
+        repeats=False,
+        a_legacy=LegacyDefinition(name='x_lib_atoms_section_gap'))
+
+
+class section_single_configuration_calculation(public.section_single_configuration_calculation):
+
+    m_def = Section(validate=False, extends_base_section=True, a_legacy=LegacyDefinition(name='section_single_configuration_calculation'))
+
+    x_lib_atoms_virial_tensor = Quantity(
+        type=np.dtype(np.float64),
+        shape=[3, 3],
+        unit='pascal',
+        description='''
+        Virial tensor for this frame.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_virial_tensor'))
+
+    x_lib_atoms_config_type = Quantity(
+        type=str,
+        shape=[],
+        description='''
+        Configuration type, e.g. = dislocation_quadrupole.
+        ''',
+        a_legacy=LegacyDefinition(name='x_lib_atoms_config_type'))
+
+
+m_package.__init_metainfo__()