Just to recapitulate the discussion that arose underneath Thruston's answer, here's a somewhat hacky approach to drawing momentum arrows next to lines in Feynman diagrams.
The command \marrow, essentially a combination of \fmfcmd (definition of a new style) and fmf (drawing an arrow with this style) is defined with 5 arguments:
\marrow{name}{arrow_pos}{text_pos}{text}{nodes}
The first argument is needed since essentially a new style is created for each arrow (letter symbols only), the second is any of up, down, left, right, the third is any of top, bot, lft, rt, the fourth is your text and the fifth is a list of nodes or vertices in your Feynman diagram (e.g. i1,v1).
A MWE is the following.
\documentclass{article}
\usepackage{feynmp-auto}
\newcommand{\marrow}[5]{%
\fmfcmd{style_def marrow#1
expr p = drawarrow subpath (1/4, 3/4) of p shifted 6 #2 withpen pencircle scaled 0.4;
label.#3(btex #4 etex, point 0.5 of p shifted 6 #2);
enddef;}
\fmf{marrow#1,tension=0}{#5}}
\begin{document}
\setlength{\unitlength}{1mm}
\begin{fmffile}{marrows}
\begin{fmfgraph*}(50,30)
\fmfleftn{i}{2}
\fmfrightn{o}{2}
\fmf{fermion}{i1,v1,o1}
\fmf{fermion}{i2,v2,o2}
\fmf{photon,label=$\gamma$}{v1,v2}
\fmfdotn{v}{2}
\fmflabel{$e^-$}{i1}
\fmflabel{$e^-$}{o1}
\fmflabel{$\mu^-$}{i2}
\fmflabel{$\mu^-$}{o2}
% Momentum arrows
\marrow{a}{down}{bot}{$p_1$}{i1,v1}
\marrow{b}{up}{top}{$p_2$}{i2,v2}
\marrow{c}{left}{lft}{$q$}{v1,v2}
\marrow{d}{down}{bot}{$p_3$}{v1,o1}
\marrow{e}{up}{top}{$p_4$}{v2,o2}
\end{fmfgraph*}
\end{fmffile}
\end{document}
With output:

The lines in \marrow are given tension 0 to prevent them from influencing the shape of the graph (Thruston's initial approach was calling \fmffreeze before the inclusion of the arrows, but I think it is best practice to avoid that command as one might want to continue adding lines and vertices after the momentum arrows are drawn).
For the more adventurous: you could allow the user to choose the spacing himself for every arrow, such as in this loop diagram.
\documentclass{article}
\usepackage{feynmp-auto}
\newcommand{\marrow}[5]{%
\fmfcmd{style_def marrow#1
expr p = drawarrow subpath (1/4, 3/4) of p shifted 6 #2 withpen pencircle scaled 0.4;
label.#3(btex #4 etex, point 0.5 of p shifted 6 #2);
enddef;}
\fmf{marrow#1,tension=0}{#5}}
\newcommand{\Marrow}[6]{%
\fmfcmd{style_def marrow#1
expr p = drawarrow subpath (1/4, 3/4) of p shifted #6 #2 withpen pencircle scaled 0.4;
label.#3(btex #4 etex, point 0.5 of p shifted #6 #2);
enddef;}
\fmf{marrow#1,tension=0}{#5}}
\begin{document}
\setlength{\unitlength}{1mm}
\begin{fmffile}{marrow2}
\begin{fmfgraph*}(50,50)
\fmfleftn{i}{2}
\fmfrightn{o}{2}
\fmf{fermion}{i1,v1,o1}
\fmf{fermion}{i2,v4,o2}
\fmf{photon}{v1,v2}
\fmf{fermion,right,tension=0.4}{v2,v3,v2}
\fmf{photon}{v3,v4}
\fmfdotn{v}{4}
\marrow{a}{down}{bot}{$p_1$}{i1,v1}
\marrow{b}{up}{top}{$p_2$}{i2,v4}
\marrow{c}{left}{lft}{$q$}{v1,v2}
\Marrow{d}{right}{rt}{$k$}{v2,v3}{26}
\Marrow{e}{left}{lft}{$q-k$}{v2,v3}{26}
\marrow{f}{left}{lft}{$q$}{v3,v4}
\marrow{g}{down}{bot}{$p_3$}{v1,o1}
\marrow{h}{up}{top}{$p_4$}{v4,o2}
\end{fmfgraph*}
\end{fmffile}
\end{document}

\fmfcmdapproach is beautiful here. There are two problems though. One, you can only have one text. For example, when making the command\newcommand{\marrow}[2]{\fmfcmd{style_def marrow expr p = drawarrow subpath (1/4, 3/4) of p shifted 6 up withpen pencircle scaled 0.4; label.top(btex #1 etex, point 0.5 of p shifted 6 up); enddef;} \fmf{marrow}{#2}}and calling\marrow{$p_1$}{i1,v1}\marrow{$p_2$}{v1,o1}, the textp_2is shown with both lines. Second, it doesn't work on vertical lines. Any thoughts on a possible solution (my Metapost is terrible)? – Betohaku Oct 12 '14 at 21:02\newcommand{\marrow}[3]{\fmfcmd{style_def marrow#1 expr p = drawarrow subpath (1/4, 3/4) of p shifted 6 up withpen pencircle scaled 0.4; label.top(btex #2 etex, point 0.5 of p shifted 6 up); enddef;} \fmf{marrow#1}{#3}}and\marrow{a}{$p_1$}{i1,v1}\marrow{b}{$p_2$}{v1,o1}. But this is far from best practice, and should only be used as last resort by lack of a better solution. – Betohaku Oct 12 '14 at 21:12upwithleft... – Thruston Oct 12 '14 at 21:14\newcommandindirectly. At your second comment: it could be included as a fourth argument to the command, probably easiest solution for now. At your third comment: yes, http://tex.stackexchange.com/questions/86588/package-for-typesetting-feynman-diagrams-efficiency-of-feynmp-and-tikz is perhaps more powerful, but it is less convenient (feynmp-autocalculates a lot for you and is very simple). – Betohaku Oct 12 '14 at 21:23label.positionhas to be defined as well:\newcommand{\marrow}[5]{\fmfcmd{style_def marrow#1 expr p = drawarrow subpath (1/4, 3/4) of p shifted 6 #2 withpen pencircle scaled 0.4; label.#3(btex #4 etex, point 0.5 of p shifted 6 #2); enddef;} \fmf{marrow#1}{#5}}with for example\marrow{a}{up}{top}{$p_1$}{i1,v1}\marrow{c}{right}{rt}{$q$}{v1,v2}. – Betohaku Oct 12 '14 at 21:31