diff --git a/parser/parser-molcas/main.py b/parser/parser-molcas/main.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ce435f3d30740d486036f8abf80b733e46e7435
--- /dev/null
+++ b/parser/parser-molcas/main.py
@@ -0,0 +1,48 @@
+from __future__ import print_function
+import os
+import sys
+import setup_paths
+import re
+
+import numpy as np
+from ase import Atoms
+from ase.spacegroup import crystal
+#from ase.data import chemical_symbols
+
+from nomadcore.simple_parser import mainFunction, SimpleMatcher as SM
+from nomadcore.local_meta_info import loadJsonFile, InfoKindEl
+from nomadcore.unit_conversion.unit_conversion \
+    import register_userdefined_quantity, convert_unit
+
+metaInfoPath = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../../../../nomad-meta-info/meta_info/nomad_meta_info/molcas.nomadmetainfo.json"))
+metaInfoEnv, warnings = loadJsonFile(filePath=metaInfoPath,
+                                     dependencyLoader=None,
+                                     extraArgsHandling=InfoKindEl.ADD_EXTRA_ARGS,
+                                     uri=None)
+
+parser_info = {'name': 'molcas-parser', 'version': '1.0'}
+
+class MolcasContext(object):
+    def startedParsing(self, fname, parser):
+        pass
+
+context = MolcasContext()
+
+mainFileDescription = SM(
+    name='root',
+    weak=True,
+    startReStr='',
+    fixedStartValues={'program_name': 'Molcas'},
+    sections=['section_run'],
+    subMatchers=[])
+
+def main(**kwargs):
+    mainFunction(mainFileDescription=mainFileDescription,
+                 metaInfoEnv=metaInfoEnv,
+                 parserInfo=parser_info,
+                 cachingLevelForMetaName={},
+                 superContext=context,
+                 **kwargs)
+
+if __name__ == '__main__':
+    main()
diff --git a/parser/parser-molcas/nomad_meta_info b/parser/parser-molcas/nomad_meta_info
new file mode 120000
index 0000000000000000000000000000000000000000..1b10d0640f73609a04c7e90a8923e8ca39e692dd
--- /dev/null
+++ b/parser/parser-molcas/nomad_meta_info
@@ -0,0 +1 @@
+../../../../nomad-meta-info/meta_info/nomad_meta_info
\ No newline at end of file
diff --git a/parser/parser-molcas/setup_paths.py b/parser/parser-molcas/setup_paths.py
new file mode 100644
index 0000000000000000000000000000000000000000..e0a0fb009256a0d4056e81c12e82d15bfd3ea7c4
--- /dev/null
+++ b/parser/parser-molcas/setup_paths.py
@@ -0,0 +1,6 @@
+import sys, os, os.path
+baseDir = os.path.dirname(os.path.abspath(__file__))
+commonDir = os.path.normpath(os.path.join(baseDir,"../../../../python-common/common/python"))
+
+if not commonDir in sys.path:
+    sys.path.insert(0, commonDir)
diff --git a/src/main/scala/eu/nomad_lab/parsers/MolcasParser.scala b/src/main/scala/eu/nomad_lab/parsers/MolcasParser.scala
new file mode 100644
index 0000000000000000000000000000000000000000..a9c88262a1fec2e6a5539156e8bd271e4e2bc88e
--- /dev/null
+++ b/src/main/scala/eu/nomad_lab/parsers/MolcasParser.scala
@@ -0,0 +1,45 @@
+package eu.nomad_lab.parsers
+
+import eu.{ nomad_lab => lab }
+import eu.nomad_lab.DefaultPythonInterpreter
+import org.{ json4s => jn }
+import scala.collection.breakOut
+
+object MolcasParser extends SimpleExternalParserGenerator(
+  name = "MolcasParser",
+  parserInfo = jn.JObject(
+    ("name" -> jn.JString("MolcasParser")) ::
+      ("parserId" -> jn.JString("MolcasParser" + lab.MolcasVersionInfo.version)) ::
+      ("versionInfo" -> jn.JObject(
+        ("nomadCoreVersion" -> jn.JObject(lab.NomadCoreVersionInfo.toMap.map {
+          case (k, v) => k -> jn.JString(v.toString)
+        }(breakOut): List[(String, jn.JString)])) ::
+          (lab.MolcasVersionInfo.toMap.map {
+            case (key, value) =>
+              (key -> jn.JString(value.toString))
+          }(breakOut): List[(String, jn.JString)])
+      )) :: Nil
+  ),
+  mainFileTypes = Seq("text/.*"),
+  mainFileRe = """Regex
+for
+molcas
+mainfile
+""".r,
+  cmd = Seq(DefaultPythonInterpreter.pythonExe(), "${envDir}/parsers/molcas/parser/parser-molcas/main.py",
+    "--uri", "${mainFileUri}", "${mainFilePath}"),
+  resList = Seq(
+    "parser-molcas/main.py",
+    "parser-molcas/setup_paths.py",
+    "nomad_meta_info/public.nomadmetainfo.json",
+    "nomad_meta_info/common.nomadmetainfo.json",
+    "nomad_meta_info/meta_types.nomadmetainfo.json",
+    "nomad_meta_info/molcas.nomadmetainfo.json"
+  ) ++ DefaultPythonInterpreter.commonFiles(),
+  dirMap = Map(
+    "parser-molcas" -> "parsers/molcas/parser/parser-molcas",
+    "nomad_meta_info" -> "nomad-meta-info/meta_info/nomad_meta_info",
+    "python" -> "python-common/common/python/nomadcore"
+  ) ++ DefaultPythonInterpreter.commonDirMapping(),
+  metaInfoEnv = Some(lab.meta.KnownMetaInfoEnvs.molcas)
+)
diff --git a/src/test/scala/eu/nomad_lab/parsers/MolcasParserSpec.scala b/src/test/scala/eu/nomad_lab/parsers/MolcasParserSpec.scala
new file mode 100644
index 0000000000000000000000000000000000000000..54a03b7aa0014aad3c7d95fd992e2921177b2022
--- /dev/null
+++ b/src/test/scala/eu/nomad_lab/parsers/MolcasParserSpec.scala
@@ -0,0 +1,19 @@
+package eu.nomad_lab.parsers
+
+import eu.nomad_lab.{ parsers, DefaultPythonInterpreter }
+import org.scalacheck.Properties
+import org.specs2.mutable.Specification
+import org.{ json4s => jn }
+
+object MolcasParserSpec extends Specification {
+  "MolcasParserTest" >> {
+    "test example1.got " >> {
+      "test with json-events" >> {
+        ParserRun.parse(MolcasParser, "parsers/molcas/test/examples/outputs/example1.got", "json-events") must_== ParseResult.ParseSuccess
+      }
+      "test with json" >> {
+        ParserRun.parse(MolcasParser, "parsers/molcas/test/examples/outputs/example1.got", "json") must_== ParseResult.ParseSuccess
+      }
+    }
+  }
+}