diff --git a/webservice/update_mdc_darks.py b/webservice/update_mdc_darks.py
new file mode 100644
index 0000000000000000000000000000000000000000..df03f8727510b81ff195e0e52210d58b8e0f1019
--- /dev/null
+++ b/webservice/update_mdc_darks.py
@@ -0,0 +1,46 @@
+import argparse
+from pathlib import Path
+
+from metadata_client.metadata_client import MetadataClient
+
+from .config import webservice as config
+
+parser = argparse.ArgumentParser(
+    description='Update run status at MDC for a given run id.')
+#  TODO: unify configuration argument names across the project
+parser.add_argument('--conf-file', type=str, help='Path to webservice config',
+                    default=None)
+parser.add_argument('--flg', type=str, choices=["IP", "F", "E"], required=True,
+                    help='Status flag for MDC: In Progress/Finished/Error.')  # noqa
+parser.add_argument('id', type=int, help='Dark run id from MDC')
+parser.add_argument('--msg', type=str, help='Message string to MDC',
+                    default='Error while job submission')
+parser.add_argument('--really', action='store_true',
+                    help="Actually make changes (otherwise dry-run)")
+args = parser.parse_args()
+
+if args.conf_file is not None:
+    config.configure(includes_for_dynaconf=[Path(args.conf_file).absolute()])
+
+mdconf = config['metadata-client']
+client_conn = MetadataClient(client_id=mdconf['user-id'],
+                             client_secret=mdconf['user-secret'],
+                             user_email=mdconf['user-email'],
+                             token_url=mdconf['token-url'],
+                             refresh_url=mdconf['refresh-url'],
+                             auth_url=mdconf['auth-url'],
+                             scope=mdconf['scope'],
+                             base_api_url=mdconf['base-api-url'])
+
+print(f"Updating dark run {args.id} to status {args.flg} at {mdconf['base-api-url']}")
+if args.really:
+    response = client_conn.update_dark_run_api(args.id, {
+        'dark_run': {'flg_status': args.flg, 'calcat_feedback': args.msg}
+    })
+
+    if response.status_code == 200:
+        print('Run is updated')
+    else:
+        print(f'Update failed {response}')
+else:
+    print("Add --really to actually make these changes")