diff --git a/buffet/buffet_client.cc b/buffet/buffet_client.cc
index 8c9e075..cf9928f 100644
--- a/buffet/buffet_client.cc
+++ b/buffet/buffet_client.cc
@@ -229,12 +229,6 @@
           base::Bind(&Daemon::CallGetPendingCommands,
                      weak_factory_.GetWeakPtr()),
           base::TimeDelta::FromMilliseconds(100));
-    } else if (command.compare("SetCommandVisibility") == 0 ||
-               command.compare("cv") == 0) {
-      if (!CheckArgs(command, args, 2))
-        return EX_USAGE;
-      job = base::Bind(&Daemon::CallSetCommandVisibility,
-                       weak_factory_.GetWeakPtr(), args.front(), args.back());
     } else {
       fprintf(stderr, "Unknown command: '%s'\n", command.c_str());
       return EX_USAGE;
@@ -382,18 +376,6 @@
     OnJobComplete();
   }
 
-  void CallSetCommandVisibility(const std::string& command_list,
-                                const std::string& visibility,
-                                ManagerProxy* manager_proxy) {
-    ErrorPtr error;
-    std::vector<std::string> commands =
-        chromeos::string_utils::Split(command_list, ",", true, true);
-    if (!manager_proxy->SetCommandVisibility(commands, visibility, &error)) {
-      return ReportError(error.get());
-    }
-    OnJobComplete();
-  }
-
   std::unique_ptr<org::chromium::Buffet::ObjectManagerProxy> object_manager_;
   int exit_code_{EX_OK};
   base::CancelableCallback<void()> timeout_task_;
diff --git a/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml b/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml
index 67028b5..56370fa 100644
--- a/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml
+++ b/buffet/dbus_bindings/org.chromium.Buffet.Manager.xml
@@ -54,23 +54,6 @@
       <arg name="json_command" type="s" direction="out"/>
       <annotation name="org.chromium.DBus.Method.Kind" value="async"/>
     </method>
-    <method name="SetCommandVisibility">
-      <tp:docstring>
-        Changes the visibility of command definition.
-        Parameters:
-          names       - a list of the full names of commands to update
-                        (each command name should look like 'base.identify').
-          visibility  - the new visibility state of the command:
-                        "none"  - Command is hidden/unavailable.
-                        "local" - Command is available to local clients only.
-                        "cloud" - Command is available to cloud clients only.
-                        "all"   - Command is available to both local and cloud
-                                  clients.
-      </tp:docstring>
-      <arg name="names" type="as" direction="in"/>
-      <arg name="visibility" type="s" direction="in"/>
-      <annotation name="org.chromium.DBus.Method.Kind" value="async"/>
-    </method>
     <method name="TestMethod">
       <arg name="message" type="s" direction="in"/>
       <arg name="echoed_message" type="s" direction="out"/>
@@ -131,11 +114,6 @@
         GCD ID if the device is registered or empty otherwise.
       </tp:docstring>
     </property>
-    <property name="CommandDefs" type="s" access="read">
-      <tp:docstring>
-        JSON with command definitions of the devices.
-      </tp:docstring>
-    </property>
     <property name="State" type="s" access="read">
       <tp:docstring>
         JSON with state of the devices.
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 9fa54cd..dd1ba79 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -55,9 +55,6 @@
   device_ = weave::Device::Create();
   device_->Start(options, &dbus_object_, sequencer);
 
-  device_->GetCommands()->AddOnCommandDefChanged(base::Bind(
-      &Manager::OnCommandDefsChanged, weak_ptr_factory_.GetWeakPtr()));
-
   device_->GetState()->AddOnChangedCallback(
       base::Bind(&Manager::OnStateChanged, weak_ptr_factory_.GetWeakPtr()));
 
@@ -201,23 +198,6 @@
   response->Return(command_str);
 }
 
-void Manager::SetCommandVisibility(DBusMethodResponsePtr<> response,
-                                   const std::vector<std::string>& in_names,
-                                   const std::string& in_visibility) {
-  weave::CommandDefinition::Visibility visibility;
-  chromeos::ErrorPtr error;
-  if (!visibility.FromString(in_visibility, &error)) {
-    response->ReplyWithError(error.get());
-    return;
-  }
-  if (!device_->GetCommands()->SetCommandVisibility(in_names, visibility,
-                                                    &error)) {
-    response->ReplyWithError(error.get());
-    return;
-  }
-  response->Return();
-}
-
 std::string Manager::TestMethod(const std::string& message) {
   LOG(INFO) << "Received call to test method: " << message;
   return message;
@@ -271,21 +251,6 @@
       client_id, client_secret, api_key, oauth_url, service_url, error);
 }
 
-void Manager::OnCommandDefsChanged() {
-  // Limit only to commands that are visible to the local clients.
-  auto commands =
-      device_->GetCommands()->GetCommandDictionary().GetCommandsAsJson(
-          [](const weave::CommandDefinition* def) {
-            return def->GetVisibility().local;
-          },
-          true, nullptr);
-  CHECK(commands);
-  std::string json;
-  base::JSONWriter::WriteWithOptions(
-      *commands, base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
-  dbus_adaptor_.SetCommandDefs(json);
-}
-
 void Manager::OnStateChanged() {
   auto state = device_->GetState()->GetStateValuesAsJson(nullptr);
   CHECK(state);
diff --git a/buffet/manager.h b/buffet/manager.h
index af01a80..feb6b9d 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -78,9 +78,6 @@
                   const std::string& in_user_role) override;
   void GetCommand(DBusMethodResponsePtr<std::string> response,
                   const std::string& id) override;
-  void SetCommandVisibility(DBusMethodResponsePtr<> response,
-                            const std::vector<std::string>& in_names,
-                            const std::string& in_visibility) override;
   std::string TestMethod(const std::string& message) override;
   bool EnableWiFiBootstrapping(
       chromeos::ErrorPtr* error,
@@ -103,7 +100,6 @@
   void StartPrivet(const weave::Device::Options& options,
                    chromeos::dbus_utils::AsyncEventSequencer* sequencer);
 
-  void OnCommandDefsChanged();
   void OnStateChanged();
   void OnRegistrationChanged(weave::RegistrationStatus status);
   void OnConfigChanged(const weave::BuffetConfig& config);
