diff --git a/README.md b/README.md
index b83e73a..913bdbc 100644
--- a/README.md
+++ b/README.md
@@ -2,3 +2,11 @@
[![Publish Docker image](https://github.com/EnzymeML/EnzymeML_JupyterLab/actions/workflows/release_image.yaml/badge.svg)](https://github.com/EnzymeML/EnzymeML_JupyterLab/actions/workflows/release_image.yaml)
🐳 Docker image with JupyterLab and `pyeed`
+
+ #### Ports Used by different containers
+
+ - `cytoscape` uses `6080` and `8787`
+ - jupyterlab uses `8888`
+ - clustalo uses `5001`
+ - blast uses `6001`
+ - mmseq2 uses `8000`
diff --git a/blast/Dockerfile b/blast/Dockerfile
new file mode 100644
index 0000000..4dc9f89
--- /dev/null
+++ b/blast/Dockerfile
@@ -0,0 +1,17 @@
+FROM ncbi/blast
+
+# Install Python and Flask
+RUN apt-get update && apt-get install -y python3 python3-pip
+RUN pip3 install fastapi uvicorn
+
+# Add the Python script to the container
+COPY app.py /usr/local/bin/app.py
+
+# Set the working directory
+WORKDIR /usr/local/bin
+
+# Expose the port the server will run on
+EXPOSE 6001
+
+# Run the Python server script
+CMD ["python3", "app.py"]
diff --git a/blast/app.py b/blast/app.py
new file mode 100644
index 0000000..08bc9dc
--- /dev/null
+++ b/blast/app.py
@@ -0,0 +1,71 @@
+from fastapi import FastAPI, HTTPException, Request
+from pydantic import BaseModel
+import subprocess
+import os
+import uuid
+from typing import Optional
+import logging
+
+app = FastAPI()
+logger = logging.getLogger(__name__)
+
+class BlastRequest(BaseModel):
+ tool: str
+ query: str
+ db: str
+ evalue: str
+ outfmt: str
+
+
+## ENDPOINTS --------------------------
+
+def create_fastas_file_from_seq(seq, filename):
+ with open(filename, 'w') as file:
+ file.write(f">seq\n{seq}\n")
+
+@app.get("/")
+async def read_root():
+ return {"message": "Welcome to the BLAST API!"}
+
+# this get json params
+@app.post("/run_blast")
+async def run_blast(request: Request):
+ request = await request.json()
+
+ query_filename = f"in.fasta"
+ result_filename = f"out.out"
+ # create empty file
+ open(result_filename, 'w').close()
+
+ # Create the FASTA file
+ create_fastas_file_from_seq(request['query'], query_filename)
+
+ # Run the BLAST command
+ command = [
+ request['tool'],
+ '-query', query_filename,
+ '-db', request['db'],
+ '-evalue', request['evalue'],
+ '-outfmt', request['outfmt'],
+ '-num_threads', request['num_threads'],
+ '-out', result_filename,
+ '-max_target_seqs', '10000'
+ ]
+
+ try:
+ subprocess.run(command, check=True)
+ except subprocess.CalledProcessError as e:
+ raise HTTPException(status_code=500, detail=str(e))
+
+
+ with open(result_filename, 'r') as file:
+ result = file.read()
+
+ return result
+
+
+
+if __name__ == '__main__':
+ import uvicorn
+
+ uvicorn.run("app:app", host="0.0.0.0", port=6001, reload=True)
diff --git a/blast/reload_development.sh b/blast/reload_development.sh
new file mode 100644
index 0000000..5409855
--- /dev/null
+++ b/blast/reload_development.sh
@@ -0,0 +1,4 @@
+sudo docker stop blast_docker
+sudo docker remove blast_docker
+sudo docker build --no-cache -t blast_docker .
+sudo docker run --name blast_docker --volume /mnt/databases:/blast/blastdb -p 6001:6001 blast_docker
\ No newline at end of file
diff --git a/clustalo/Dockerfile b/clustalo/Dockerfile
index 6d4f188..591a20f 100644
--- a/clustalo/Dockerfile
+++ b/clustalo/Dockerfile
@@ -11,4 +11,7 @@ RUN wget http://www.clustal.org/omega/clustalo-1.2.4-Ubuntu-x86_64 \
COPY requirements.txt .
RUN pip install -r requirements.txt
+COPY app.py .
+
+
CMD ["python", "app.py"]
diff --git a/clustalo/__pycache__/app.cpython-312.pyc b/clustalo/__pycache__/app.cpython-312.pyc
index 157be52..f62b98c 100644
Binary files a/clustalo/__pycache__/app.cpython-312.pyc and b/clustalo/__pycache__/app.cpython-312.pyc differ
diff --git a/clustalo/requirements.txt b/clustalo/requirements.txt
index cdbd180..80d5c68 100644
--- a/clustalo/requirements.txt
+++ b/clustalo/requirements.txt
@@ -1,3 +1,3 @@
fastapi
python-multipart
-uvicorn
+uvicorn
\ No newline at end of file
diff --git a/mmseqs2/Dockerfile b/mmseqs2/Dockerfile
new file mode 100644
index 0000000..f747526
--- /dev/null
+++ b/mmseqs2/Dockerfile
@@ -0,0 +1,19 @@
+# Base image for mmseqs2
+FROM soedinglab/mmseqs2:latest
+
+# Add the standard Debian repositories to ensure we can install all packages
+RUN echo "deb http://deb.debian.org/debian bullseye main contrib non-free" > /etc/apt/sources.list
+RUN echo "deb http://security.debian.org/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list
+
+# Install Python and Flask
+RUN apt-get update && apt-get install -y python3 python3-pip
+RUN pip3 install fastapi uvicorn
+
+# Copy the FastAPI app to the container
+COPY app.py app.py
+
+# Expose the port on which FastAPI will run
+EXPOSE 8000
+
+# Start the FastAPI server when the container starts
+CMD ["python3", "app.py"]
diff --git a/mmseqs2/app.py b/mmseqs2/app.py
new file mode 100644
index 0000000..98b1586
--- /dev/null
+++ b/mmseqs2/app.py
@@ -0,0 +1,133 @@
+from fastapi import FastAPI, HTTPException
+from pydantic import BaseModel
+import subprocess
+import os
+from uuid import uuid4
+import shutil
+
+app = FastAPI()
+
+# Define a model for the input parameters
+class MMSeqsParams(BaseModel):
+ query: str # The query sequence
+ database: str
+ output: str # The output directory
+ sensitivity: float = 7.5 # Sensitivity parameter for mmseqs2
+ threads: int = 4 # Number of threads to use
+ blast_format: bool = True # Option to convert to BLAST+ format
+
+# Dictionary to keep track of running jobs and results
+job_results = {}
+
+def create_fastas_file_from_seq(seq, filename):
+ with open(filename, 'w') as file:
+ file.write(f">seq\n{seq}\n")
+
+def create_queryDB_from_seq(filename):
+ # this will create a db from a single sequence file
+ # the command is mmseqs createdb