diff --git a/core/lib/Drupal/Core/Block/BlockPluginInterface.php b/core/lib/Drupal/Core/Block/BlockPluginInterface.php
index 200d10d..67932eb 100644
--- a/core/lib/Drupal/Core/Block/BlockPluginInterface.php
+++ b/core/lib/Drupal/Core/Block/BlockPluginInterface.php
@@ -12,6 +12,7 @@
 use Drupal\Core\Cache\CacheableInterface;
 use Drupal\Component\Plugin\PluginInspectionInterface;
 use Drupal\Component\Plugin\ConfigurablePluginInterface;
+use Drupal\Core\Entity\OperationsProviderInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\PluginFormInterface;
 use Drupal\Core\Session\AccountInterface;
diff --git a/core/lib/Drupal/Core/Entity/OperationsProviderInterface.php b/core/lib/Drupal/Core/Entity/OperationsProviderInterface.php
new file mode 100644
index 0000000..bc873e0
--- /dev/null
+++ b/core/lib/Drupal/Core/Entity/OperationsProviderInterface.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Entity\OperationsProviderInterface.
+ */
+
+namespace Drupal\Core\Entity;
+
+/**
+ * Defines an interface for providing operations links.
+ */
+interface OperationsProviderInterface {
+
+  /**
+   * Returns a list of operation links available for this block.
+   *
+   * @return array
+   *   Array of operation links.
+   */
+  public function getOperationLinks();
+
+}
diff --git a/core/modules/block/src/BlockListBuilder.php b/core/modules/block/src/BlockListBuilder.php
index e5da65d..32bb886 100644
--- a/core/modules/block/src/BlockListBuilder.php
+++ b/core/modules/block/src/BlockListBuilder.php
@@ -14,6 +14,7 @@
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
+use Drupal\Core\Entity\OperationsProviderInterface;
 use Drupal\Core\Form\FormInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -383,6 +384,10 @@ public function getDefaultOperations(EntityInterface $entity) {
       $operations['edit']['title'] = t('Configure');
     }
 
+    if ($entity instanceof OperationsProviderInterface) {
+      $operations += $entity->getOperationLinks();
+    }
+
     return $operations;
   }
 
diff --git a/core/modules/block/src/Entity/Block.php b/core/modules/block/src/Entity/Block.php
index ee977d0..148291b 100644
--- a/core/modules/block/src/Entity/Block.php
+++ b/core/modules/block/src/Entity/Block.php
@@ -14,6 +14,7 @@
 use Drupal\Core\Config\Entity\ConfigEntityInterface;
 use Drupal\Core\Entity\EntityWithPluginBagsInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Entity\OperationsProviderInterface;
 
 /**
  * Defines a Block configuration entity class.
@@ -41,7 +42,7 @@
  *   }
  * )
  */
-class Block extends ConfigEntityBase implements BlockInterface, EntityWithPluginBagsInterface {
+class Block extends ConfigEntityBase implements BlockInterface, EntityWithPluginBagsInterface, OperationsProviderInterface {
 
   /**
    * The ID of the block.
@@ -174,4 +175,16 @@ public function getVisibility() {
     return $this->getPlugin()->getVisibilityConditions()->getConfiguration();
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getOperationLinks() {
+    $plugin = $this->getPlugin();
+    $links = [];
+    if ($plugin instanceof OperationsProviderInterface) {
+      $links = $plugin->getOperationLinks();
+    }
+    return $links;
+  }
+
 }
diff --git a/core/modules/system/src/Plugin/Block/SystemMenuBlock.php b/core/modules/system/src/Plugin/Block/SystemMenuBlock.php
index d2c0270..432bbb1 100644
--- a/core/modules/system/src/Plugin/Block/SystemMenuBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemMenuBlock.php
@@ -10,10 +10,12 @@
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Block\BlockBase;
 use Drupal\Core\Cache\Cache;
+use Drupal\Core\Entity\OperationsProviderInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Menu\MenuActiveTrailInterface;
 use Drupal\Core\Menu\MenuLinkTreeInterface;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\Core\Extension\ModuleHandlerInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -26,7 +28,7 @@
  *   deriver = "Drupal\system\Plugin\Derivative\SystemMenuBlock"
  * )
  */
-class SystemMenuBlock extends BlockBase implements ContainerFactoryPluginInterface {
+class SystemMenuBlock extends BlockBase implements ContainerFactoryPluginInterface, OperationsProviderInterface {
 
   /**
    * The menu link tree service.
@@ -43,6 +45,11 @@ class SystemMenuBlock extends BlockBase implements ContainerFactoryPluginInterfa
   protected $menuActiveTrail;
 
   /**
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface.
+   */
+  protected $moduleHandler;
+
+  /**
    * Constructs a new SystemMenuBlock.
    *
    * @param array $configuration
@@ -55,11 +62,14 @@ class SystemMenuBlock extends BlockBase implements ContainerFactoryPluginInterfa
    *   The menu tree service.
    * @param \Drupal\Core\Menu\MenuActiveTrailInterface $menu_active_trail
    *   The active menu trail service.
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler service.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, MenuLinkTreeInterface $menu_tree, MenuActiveTrailInterface $menu_active_trail) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, MenuLinkTreeInterface $menu_tree, MenuActiveTrailInterface $menu_active_trail, ModuleHandlerInterface $module_handler) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
     $this->menuTree = $menu_tree;
     $this->menuActiveTrail = $menu_active_trail;
+    $this->moduleHandler = $module_handler;
   }
 
   /**
@@ -71,7 +81,8 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_id,
       $plugin_definition,
       $container->get('menu.link_tree'),
-      $container->get('menu.active_trail')
+      $container->get('menu.active_trail'),
+      $container->get('module_handler')
     );
   }
 
@@ -203,4 +214,24 @@ protected function getRequiredCacheContexts() {
     return array('cache_context.user.roles', 'cache_context.language');
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getOperationLinks() {
+    $menu = $this->getDerivativeId();
+
+    $links = array();
+    if ($this->moduleHandler->moduleExists('menu_ui')) {
+      $links['menu-edit'] = array(
+        'title' => $this->t('Edit menu'),
+        'route_name' => 'entity.menu.edit_form',
+        'route_parameters' => array(
+          'menu' => $menu,
+        ),
+        'weight' => 50,
+      );
+    }
+    return $links;
+  }
+
 }
diff --git a/core/modules/system/src/Tests/Block/SystemMenuBlockTest.php b/core/modules/system/src/Tests/Block/SystemMenuBlockTest.php
index 1016c04..68c6b26 100644
--- a/core/modules/system/src/Tests/Block/SystemMenuBlockTest.php
+++ b/core/modules/system/src/Tests/Block/SystemMenuBlockTest.php
@@ -14,6 +14,7 @@
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\Route;
 use Symfony\Component\Routing\RouteCollection;
+use Drupal\user\Entity\Role;
 
 /**
  * Tests \Drupal\system\Plugin\Block\SystemMenuBlock.
@@ -37,6 +38,7 @@ class SystemMenuBlockTest extends KernelTestBase {
     'block',
     'menu_test',
     'menu_link_content',
+    'menu_ui',
     'field',
     'user',
   );
@@ -86,6 +88,19 @@ protected function setUp() {
     $this->installSchema('system', array('router'));
     $this->installEntitySchema('menu_link_content');
 
+    $user = User::create(array(
+      'name' => 'tony',
+      'mail' => 'tony@magicalponies.com',
+    ));
+    $role = Role::create(array(
+      'label' => 'Menu manager',
+      'id' => 'menu_manager',
+    ));
+    $role->grantPermission('administer menu');
+    $role->save();
+    $user->addRole($role->id());
+    \Drupal::service('current_user')->setAccount($user);
+
     $account = User::create([
       'name' => $this->randomMachineName(),
       'status' => 1,
@@ -173,6 +188,15 @@ public function testSystemMenuBlockConfigDependencies() {
       ),
     );
     $this->assertIdentical($expected, $dependencies);
+
+    $links = $block->getOperationLinks();
+    $menu_link = array(
+      'title' => 'Edit menu',
+      'route_name' => 'entity.menu.edit_form',
+      'route_parameters' => array('menu' => $this->menu->id()),
+      'weight' => 50,
+    );
+    $this->assertIdentical($links, ['menu-edit' => $menu_link]);
   }
 
   /**
