diff --git a/proto/extensions/manager_service.proto b/proto/extensions/manager_service.proto
index 9e2506b6ba955d201c11ea3bd4a9fa24f32cc6e3..d8cb3462ee0b164cb33230301098483273ce1990 100644
--- a/proto/extensions/manager_service.proto
+++ b/proto/extensions/manager_service.proto
@@ -52,28 +52,31 @@ service ExtensionManagerService {
   // Получить список зарегистрированных сервисов
   rpc ListRegisteredExtensions(ListRegisteredExtensionsRequest) returns (ListRegisteredExtensionsResponse) {} // Получить список сервисов
 
-  // ListExtensions - получить статус расширения
+  // ListExtensions - получить информацию о расширениях
   rpc ListExtensions(ListExtensionsRequest) returns (ListExtensionsResponse) {} // Получить описание сервиса
 }
 
-// ListExtensionsRequest - запрос на получение статуса расширений в пространстве и окружении.
-// Если список расширений в запросе не передан, возвращаются расширения в соответствии с
-// переданными опциями (`installed/uninstalled`):
-// - если в ListExtensionsRequest.extensions передан список расширений, то флаги игнорируются
-//   и возвращается информация о переданных в запросе расширениях
-// - `installed:false, uninstalled:false` (равноценно `installed:true, uninstalled:false`) -
-//   возвращается информация об установленных расширениях
-// - `installed:false, uninstalled:true` - вернуть только зарегистрированные, но не установленные расширения
-// - `installed:true, uninstalled:true` - вернуть информацию о всех зарегистрированных расширениях
+// ListExtensionsRequest - запрос на получение статуса расширений в пространстве и окружении
 message ListExtensionsRequest {
-  repeated string extensions = 1; // Имя расширения (опционально), regexp
+  // Имя расширения (опционально), regexp. Фильтр по расширениям является приоритетным
+  // относительно остальных фильтров - если в `ListExtensionsRequest.extensions` передано
+  // [ a, b, c ], то в `ListExtensionsResponse.extensions` вернется три элемента с информацией о
+  // каждом из расширений
+  repeated string extensions = 1;
   string space_id = 2; // Пространство имен расширения
   string env_id = 3; // Идентификатор окружения
-  bool installed = 4; // Вернуть установленные расширения (по умолчанию)
-  bool not_installed = 5; // Вернуть не установленные расширения
+
+  // Вернуть список расширений, которые находятся в одном из переданных состояний
+  // Если список состояний пустой, по умолчанию возвращаются расширения в любом состоянии,
+  // РєСЂРѕРјРµ NOT_INSTALLED
+  repeated State state = 4;
 }
 
-// GetExtensionResponse - описание расширения
+// ListExtensionsResponse - описание расширений. Результирующий список возвращается всегда
+// в отсортированном виде:
+// - Если `ListExtensionsRequest.extensions` пустой, то отсортированный по идентификатору расширения
+// - Если `ListExtensionsRequest.extensions` заполнен, то возвращаются расширения в соответствующем
+//   запросу порядке
 message ListExtensionsResponse {
   message ExtensionInfo {
     string extension = 10100; // Имя расширения
@@ -82,7 +85,6 @@ message ListExtensionsResponse {
     string msg = 10200; // Сообщение
     string error = 10300; // Ошибка (state == ERROR)
     bool not_found = 10350; // Расширение не найдено
-    bool installed = 10400; // Расширение установлено
     bool update_available = 10500; // Доступно обновление
     string installed_version = 10510; // Установленная версия расширения
     string available_version = 10520; // Доступная версия расширения
@@ -127,7 +129,7 @@ message ListRegisteredExtensionsResponse {
 // space_extensions (Пространство/Расширения)
 
 enum State {
-  UNKNOWN = 0;
+  NOT_INSTALLED = 0;
   INSTALLED = 1;
   IN_PROGRESS = 2;
   FAIL = 3;