German NGO Sea-Eye said one of its vessels was threatened on Saturday by Libyan coast guards who fired warning shots as it rescued 90 migrants from a lifeboat.
"We are in shock: we have never been threatened in this way!" spokesman Gorden Isler told AFP, adding European Union member states were allowing this "brutal behaviour".
"We were able to get 90 people on board, including two women," Isler said.
After receiving a distress call from people aboard the lifeboat off the coast of Libya, the crew on the NGO's ship named Alan Kurdi located the boat and rescued the migrants.
"While we had already been able to recover 10 people on board, our boat was surrounded by three speedboats with masked and heavily armed people aboard," Isler said.
The coastguards fired shots into the air and water, where several migrants had fallen, Sea-Eye said.
The NGO said it believed the vessel was not in Libyan waters and did not specify where it plans to disembark the migrants.
Saturday's operation comes a week after 104 people were rescued just off the coast of Libya by the Ocean Viking Ship, run by NGO SOS Mediterranee and Doctors Without Borders.
The route through Libya to reach Europe is a popular path for migrants from East Africa, the Sahel and the Middle East.
Last month Italy, France, Germany, and Malta proposed a system for automatically distributing asylum seekers across the EU to prevent rescue ships from being stranded at sea for weeks.
But so far only a handful of other nations have backed the plan.