We study a distributed algorithm for adjusting beamforming vectors in a peer-to-peer wireless network with multiple-input multiple-output (MIMO) channels. Each transmitter precoding matrix has rank one, and a linear minimum mean squared error (MMSE) filter is applied at each receiver. Our objective is to maximize the total utility summed over all users, where each user's utility is a function of the received signal-to-interference-plus-noise ratio (SINR). Given all users' beamforming vectors and receive filters, each receiver announces an interference price, representing the marginal cost of interference from other users. A particular transmitter updates its beamforming vector to maximize its utility minus the interference cost to other users. We show that if the utility functions satisfy certain concavity conditions, then the total utility is non-decreasing with each update. We also present numerical results that illustrate the effect of ignoring interference prices from all but the closest users, and relaxing requirements on the frequency of beam and price updates.