diff --git a/bin/merge b/bin/merge
new file mode 100755
index 0000000000000000000000000000000000000000..529ffeabc62727d391288e112fee29954674b4c4
--- /dev/null
+++ b/bin/merge
@@ -0,0 +1,85 @@
+#!/bin/bash
+
+function gitlab() {
+  output="$(curl --write-out "\nHTTP-Code:%{http_code}" -X "$2" -s -H "Private-Token: ${GITLAB_PRIVATE_TOKEN}" "${GITLAB_URL}"/api/v4/"$3" "$@")"
+  result="$(echo "$output" | grep "{")"
+  code="$(echo "$output" | grep -m 1 "HTTP-Code:" | cut -d: -f2)"
+  if [[ $code -eq 200 ]]; then
+    return
+  fi
+  echo "$2 request to $3 did not succeed! Responds with code $code instead of $1"
+  exit 99
+}
+
+function isNumeric() {
+  re='^[0-9]+$'
+  if [[ $1 =~ $re ]]; then
+     return 0
+  fi
+  return 1
+}
+
+function parseUrl() {
+  # extract the protocol
+  proto="$(echo "$1" | grep :// | sed -e's,^\(.*://\).*,\1,g')"
+  # remove the protocol
+  url="${1/$proto/}"
+  # extract the user (if any)
+  user="$(echo "$url" | grep @ | cut -d@ -f1)"
+  # extract the host and port
+  hostport="$(echo "${url/$user@/}" | cut -d/ -f1)"
+  # by request host without port
+  # shellcheck disable=SC2001
+  host="$(echo "$hostport" | sed -e 's,:.*,,g')"
+  # by request - try to extract the port
+  port="$(echo "$hostport" | sed -e 's,^.*:,:,g' -e 's,.*:\([0-9]*\).*,\1,g' -e 's,[^0-9],,g')"
+  # extract the path (if any)
+  path="$(echo "$url" | sed -e 's,:,/,g' | grep / | cut -d/ -f2-)"
+}
+
+SOURCEBRANCH=$(git rev-parse --abbrev-ref HEAD)
+if [[ "$SOURCEBRANCH" == "main" ]]; then
+  echo "Main branch can not be merged."
+  exit 1
+elif [[ "$SOURCEBRANCH" == "develop" ]]; then
+  TARGETBRANCH=main
+else
+  TARGETBRANCH=develop
+fi
+if [[ "x${GITLAB_URL}" == "x" ]]; then
+  echo "Missing GITLAB_URL environment variable, should be set to e.g. https://gitlab.lakedrops.com"
+  exit 2
+fi
+if [[ "x${GITLAB_PRIVATE_TOKEN}" == "x" ]]; then
+  echo "Missing GITLAB_PRIVATE_TOKEN environment variable"
+  exit 3
+fi
+parseUrl "$GITLAB_URL"
+host1=$host
+parseUrl "$(git config remote.origin.url)"
+host2=$host
+if [[ "$host1" != "$host2" ]]; then
+  echo "This repository doesn't match the provided GitLab instance"
+  exit 4
+fi
+# shellcheck disable=SC2001
+path="$(echo "$path" | sed -e 's,\..*,,g')"
+gitlab 200 GET projects?search="$path"
+PRJID=$(echo "$result"  | jq -r .[0]."id")
+if [[ $(isNumeric "$PRJID") -eq 1 ]]; then
+  echo "Can not find project ID"
+  exit 5
+fi
+
+# Create MR
+gitlab 200 POST projects/"$PRJID"/merge_requests --data "source_branch=$SOURCEBRANCH" --data "target_branch=$TARGETBRANCH" --data "title=Merging $SOURCEBRANCH into $TARGETBRANCH"
+MRID=$(echo "$result"  | jq -r ."iid")
+if [[ $(isNumeric "$MRID") -eq 1 ]]; then
+  echo "Can not create merge request"
+  exit 6
+fi
+echo "Created MR at $(echo "$result"  | jq -r ."web_url")"
+
+# Merge MR
+gitlab 200 PUT projects/"$PRJID"/merge_requests/"$MRID"/merge --data "should_remove_source_branch=0"
+echo "Merged successfully!"