MFEprimer-3.1 #

Big change from v3.0

Major changes from v3.0 #

  • merge several tools into one single execute file mfeprimer
  • support major platforms: Linux, Mac and Windows
  • bug fixed and faster than v3.0
  • fix thermodynamics calculation bugs for dimers and hairpins
  • local web server version is available

Summary of different versions #

Before getting started, I’d like to make a summary for different versions. Please choose the right version for you.

Title web server by the author command-line local web server
primer number <= 50 no limit usually <= 50
database pre-indexed by the author no limit no limit
user interface graphic and easy to use terminal and requires essential Linux skills graphic and easy to use
users from worldwide the owner usually all members of the institution
workflow no yes and can be integrated into user defined primer design workflows no

1. Web servers maintained by the author‌ #

Online Servers

2. Command-line version #

Install #

  1. Please download the right version for your machine: (take Linux version as an example).
  2. Uncompress the file.
  3. Make sure the file has the execute permission.
  4. Run with option “-h” to get help message. You can rename the file to mfeprimer as you wish.
# download the executable mfeprimer file
wget -c

# uncompress the file
gzip -d mfeprimer-3.1.0-linux-amd64.gz

# make it executable
chmod +x mfeprimer-3.1.0-linux-amd64

# test it
./mfeprimer-3.1.0-linux-amd64 -h

MFEprimer-3.1.0, a functional primer quality control program for checking
non-specific amplicons, dimers, hairpins and others.

Web site:

Cite: Wang, K., Li, H., Xu, Y., Shao, Q., Yi, J., Wang, R., … Qu, W. (2019).
MFEprimer-3.0: quality control for PCR primers. Nucleic Acids Research.

  mfeprimer [flags]
  mfeprimer [command]

Available Commands:
  dimer       analysis primer dimers
  hairpin     analysis primer hairpins
  help        Help about any command
  index       index fasta file for mfeprimer
  indexcmp    Compare the old and the new index file, return false when they are not same
  spec        analysis specificity of primers
  version     print version number

  -b, --bind           print specific and nonspecific binding sites and patterns for each primer
  -d, --db strings     [*] database indexed for specificity check: -d hg19.fa -d mrna.fa
      --diva float     concentration of divalent cations [mM] (default 1.5)
      --dntp float     concentration of dNTPs [mM] (default 0.25)
  -h, --help           help for mfeprimer
  -i, --in string      [*] a file contains primer sequences in fasta format
  -j, --json           output in json format
  -k, --kvalue int     k value for format, defaut is 9 (default 9)
  -S, --maxSize int    max product size for the predicted amplicons [bp] (default 2000)
  -s, --minSize int    min product size for the predicted amplicons [bp]
      --misEnd int     mis-match ends to the position of 3' end, 9 (kvalue) for the 9th base from the 3'end (default 9)
      --misMatch int   max allowed mismatches between kmer and its binding sites
      --misStart int   mis-match starts from the position of 3' end, 1 is for the very end of primer. (default 1)
      --mono float     concentration of monovalent cations [mM] (default 50)
      --oligo float    concentration of annealing oligos [nM] (default 50)
  -o, --out string     output file name, e.g., primer.mfe.txt
      --snp string     SNP file name in bed format, e.g., dbsnp151.bed
  -t, --tm float       tm cutoff value to filter the amplicons (default 30)

Use "mfeprimer [command] --help" for more information about a command.

In v3.1.0, I make index,dimer,hairpin as sub-commands to mfeprimer, each sub-command has their own arguments and options to set.

I manually tested the Mac and Linux version, and I will find time to test the Windows version.

Usage #

I’d like to do some examples with sample files, let’s prepare the test files:

# make a test directory
mkdir test
cd test

# chrM.fa as database
wget -c

# p.fa test primer sequences in fasta format
wget -c

# snp in bed format to check whether a primers bind to a snp site
wget -c

# make a softlink
ln -s ../mfeprimer-3.1.0-linux-amd64 mfeprimer 

The file tree is:

tree .
├── chrM.fa
├── mfeprimer -> ../mfeprimer-3.1.0-linux-amd64
├── p.fa
└── snp.bed

Index databases #

./mfeprimer index -i chrM.fa

After index, the file tree is:

tree .
├── chrM.fa
├── chrM.fa.fai
├── chrM.fa.json
├── chrM.fa.log
├── chrM.fa.primerqc
├── chrM.fa.primerqc.fai
├── mfeprimer -> ../mfeprimer-3.1.0-linux-amd64
├── p.fa
└── snp.bed

mfeprimer index will add 5 files with suffixes: “.fai”, “.json”, “.primerqc”, “.primerqc.fai” and “.log”.

Run mfeprimer for full quality control #

# run mfeprimer
./mfeprimer -i p.fa -d chrM.fa

Without “-o” options, the result will print to the screen:

MFEprimer-3.0 Primer Quality Reports (2019-10-17 11:29:18)

Primer ID                      Sequence (5'-->3')                    Length     GC      Tm      Dg        Binding Number
                                                                      (bp)      (%)    (°C)  (kcal/mol)   Plus     Minus

p1                             CTACAACCCCACCACGTACC                      20   60.00   60.55    -22.23         0         0
p2                             CGTTACACACTTTGCGGCAA                      20   50.00   60.47    -22.43         0         0
p3                             CTTAAATAGGGACCTGTATGAATGGCTC              28   42.86   61.98    -27.11         2         1
p4                             CCGAAATTTTTAATGCAGGTTTGGTAGT              28   35.71   61.97    -27.14         0         1
p5                             GGACACTCTATGGGAAAGAGTGTCC                 25   52.00   62.91    -26.07         0         1

Hairpin List (1)

Hairpin 1: p5

    Score: 9, Tm = 26.56 °C, Delta G = -4.48 kcal/mol


Dimer List (1)

Dimer 1: p2 x p2

    Score: 7, Tm = 14.55 °C, Delta G = -6.09 kcal/mol


Descriptions of [ 1 ] potential amplicons

AmpID HitID                                            Size       FpTm       RpTm       FpDg       RpDg
                                                       (bp)       (°C)       (°C)   kcal/mol   kcal/mol

1     chrM                                              200      61.93      62.67     -27.40     -28.08

Amplicon details

Amp 1: p3 + p4 ==> chrM

    Size = 200 bp, GC content = 43.50%
    F: Tm = 61.93 °C, Delta G = -27.40 kcal/mol
    R: Tm = 62.67 °C, Delta G = -28.08 kcal/mol
    Binding sites: 2612(28/28) ... 2811(28/28)

   1                          28
   ::::::::::::::::::::::::::::                                                            2811
   2612                                                         ::::::::::::::::::::::::::::
                                                             3' ACTACCAAACCTGCATTAAAAATTTCGG 5'
                                                               28                          1

>Amp_1 p3 + p4 ==> chrM


                   Primer file: p.fa
                      Database: chrM.fa
                        Kvalue: 9
                      MisMatch: 0
                Tm cutoff (°C): 30.00
        Amplicon min size (bp): 0
        Amplicon max size (bp): 2000
       Monovalent cations [mM]: 50.00
         Divalent cations [mM]: 1.50
                    dNTPs [mM]: 0.25
         Annealing oligos [nM]: 50.00


Kun Wang, Haiwei Li, Yue Xu, Qianzhi Shao, Jianming Yi, Ruichao Wang, Wanshi Cai, Xingyi Hang,
Chenggang Zhang, Haoyang Cai, Wubin Qu, MFEprimer-3.0: quality control for PCR primers,
Nucleic Acids Research, Volume 47, Issue W1, 02 July 2019, Pages W610–W613,

Web & Contact
Wubin Qu <>

Total time used: 81.641035ms.

The relation between mfeprimer and its sub-commands: mfeprimer do a full quality control for primers for specificity, binding sites, dimers and hairpins. While, spec only for specificity, dimer is only for dimers and hairpin is only for hairpins, as their names indicated. The sub-commands have more options to control the behavious. mfeprimer only have default parameters for dimers and hairpins.

Run mfeprimer spec for specificity #

./mfeprimer spec -i p.fa -d chrM.fa

Run mfeprimer dimer for dimers #

./mfeprimer dimer -i p.fa

Run mfeprimer hairpin for hairpins #

./mfeprimer hairpin -i p.fa

3. Local web server #

Download and install #

  1. Please download the right version for your machine: (take the Mac version as an example).
  2. Uncompress the file.
  3. test it.
# download the executable mfeprimer-web file
wget -c

# uncompress the file
tar zxvf mfeprimer-web-3.1.1-darwin-amd64.tar.gz

# The file tree is:
tree -L 2

├── conf
│   └── app.conf
├── mfedb
│   ├── chrM.fa
│   ├── chrM.fa.fai
│   ├── chrM.fa.json
│   ├── chrM.fa.log
│   ├── chrM.fa.primerqc
│   └── chrM.fa.primerqc.fai
├── mfeprimer-web
├── static
│   ├── css
│   ├── fonts
│   ├── img
│   └── js
└── views
    ├── dimer
    ├── hairpin
    ├── layout.html
    ├── seq
    └── spec

# test it

# open your browser and enter the following address, and you will see the default page.


mfepriemr-web front page

Configure the server #

Open the “conf/app.conf”, change the corresponding item following the references in the file.

Add database #

There is an example database named “chrM.fa” in “mfedb” directory. You can place any database here and index the database with command mfeprimer index -i dbname.fasta.