diff --git a/mdserver.py b/mdserver.py
new file mode 100755
index 0000000000000000000000000000000000000000..4b145309363637fb1eb28a2b24e1c3594638c4d5
--- /dev/null
+++ b/mdserver.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+import sys
+import copy
+
+from lxml import etree as ET
+from signxml import XMLSigner, XMLVerifier
+# import hashlib
+
+from flask import Flask, request
+from urllib.parse import unquote
+# import traceback
+
+app = Flask(__name__)
+
+
+# Find all IdP's in edugain metadata
+idps = {}
+signed = {}
+found = 0
+
+cert = open("meta.crt").read()
+key = open("meta.key").read()
+
+
+@app.route('/sign', methods=['GET'])
+def sign():
+    global idps, signed, cert
+    entity = unquote(request.args.get('id'))
+    try:
+        if entity in signed:
+            print(f"serve {entity}")
+            return signed[entity]
+        elif entity in idps:
+            print(f"sign {entity}")
+            signed_element = XMLSigner().sign(idps[entity], key=key, cert=cert)
+            signed_xml = ET.tostring(signed_element, pretty_print=True).decode()
+            signed[entity] = signed_xml
+            return signed_xml
+    except Exception as e:
+        print(entity)
+        print(f"  {e}")
+        # traceback.print_exc()
+
+
+for mdfile in sys.argv[1:]:
+    tree = ET.ElementTree(file=mdfile)
+    root = tree.getroot()
+    ns = copy.deepcopy(root.nsmap)
+    ns['xml'] = 'http://www.w3.org/XML/1998/namespace'
+
+    for idp in root.findall('md:EntityDescriptor', ns):
+        entityID = idp.attrib.get('entityID', 'none')
+        if entityID not in idps:
+            print(entityID)
+            idps[entityID] = idp
+            found += 1
+
+print(f"Found: {found}")
+
+app.run(host='0.0.0.0', port=5001)
diff --git a/requirements.txt b/requirements.txt
index fa728d53f816b8b6845df799121bb040f616d645..8d90b7ea6b98011c79fdcf7e2ac890cac72d1af9 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,2 +1,3 @@
 lxml
 signxml
+flask