diff --git a/openecomp-be/tools/build/scripts/parse-json.py b/openecomp-be/tools/build/scripts/parse-json.py
new file mode 100644
index 0000000..46537ce
--- /dev/null
+++ b/openecomp-be/tools/build/scripts/parse-json.py
@@ -0,0 +1,83 @@
+#!/usr/bin/python
+
+##############################################################################
+###
+### parse-json.py
+###
+### A utility to parse a cassnadra-commands file and return the commands per type
+### An Example for a json file:
+###     {
+###         "create":{
+###                 "choice_or_other":"CREATE TYPE IF NOT EXISTS choice_or_other (results text)",
+###                 "vendor_license_model": "CREATE TABLE IF NOT EXISTS vendor_license_model (vlm_id text PRIMARY KEY, name text, description text, icon text)",
+###                 "license_agreement": "CREATE TABLE IF NOT EXISTS license_agreement (vlm_id text, la_id text, name text, description text, type text, contract text, req_const text, fg_ids set<text>, PRIMARY KEY (vlm_id, la_id))",
+###                 "feature_group": "CREATE TABLE IF NOT EXISTS feature_group (vlm_id text, fg_id text, name text, description text, ep_ids set<text>, lkg_ids set<text>, refd_by_las set<text>, PRIMARY KEY (vlm_id, fg_id))",
+###                 "license_key_group": "CREATE TABLE IF NOT EXISTS license_key_group (vlm_id text,lkg_id text,name text,description text, type text, operational_scope text, ref_fgs set<text>,PRIMARY KEY (vlm_id, lkg_id))",
+###         }
+###     }
+###
+### The return for "create" will be:
+###                 CREATE TYPE IF NOT EXISTS choice_or_other (results text)
+###                 CREATE TABLE IF NOT EXISTS vendor_license_model (vlm_id text PRIMARY KEY, name text, description text, icon text)
+###                 CREATE TABLE IF NOT EXISTS license_agreement (vlm_id text, la_id text, name text, description text, type text, contract text, req_const text, fg_ids set<text>, PRIMARY KEY (vlm_id, la_id))
+###                 CREATE TABLE IF NOT EXISTS feature_group (vlm_id text, fg_id text, name text, description text, ep_ids set<text>, lkg_ids set<text>, refd_by_las set<text>, PRIMARY KEY (vlm_id, fg_id))
+###                 CREATE TABLE IF NOT EXISTS license_key_group (vlm_id text,lkg_id text,name text,description text, type text, operational_scope text, ref_fgs set<text>,PRIMARY KEY (vlm_id, lkg_id))
+### Usage:
+###
+###    parse-json.py -t create -f cassandra-commands.json
+###
+### For example:
+###
+###
+### Author: Avi Ziv
+### Version 1.0
+### Date: 3 May 2016
+###
+##############################################################################
+
+import sys, getopt
+import json as json
+from collections import OrderedDict
+
+
+def readJsonFile(file, type):
+  with open(file, 'r') as f:
+     data = json.load(f, object_pairs_hook=OrderedDict)
+     return data[type]
+
+def printJsonTypeEntries(jsonData):
+        for i in jsonData.keys():
+                print jsonData[i] + ';'
+
+
+def usage():
+    print 'parseJsonFile.py [-f <json-file> & -t <cql-type: drop|create|insert|update|select]'
+
+def main(argv):
+    action = ''
+
+    try:
+        opts, args = getopt.getopt(argv, "h:f:t:")
+    except getopt.GetoptError:
+        usage()
+        sys.exit(2)
+    for opt, arg in opts:
+        if opt == '-h':
+            usage()
+            sys.exit()
+        elif opt == '-f':
+            jsonFile = arg
+            action = 'file'
+        elif opt == '-t':
+            type = arg
+
+    if action == 'file':
+        sJson = readJsonFile(jsonFile, type)
+        printJsonTypeEntries(sJson)
+        sys.exit()
+    else:
+        usage()
+
+
+if __name__ == "__main__":
+    main(sys.argv[1:])
