diff --git a/openbis_ng_ui/src/js/common/consts/objectType.js b/openbis_ng_ui/src/js/common/consts/objectType.js
index b785167334b57f24e64a43071df43ccca953eb11..3e3d1bfcad1eef0cd92c75e2d68dff19386731dd 100644
--- a/openbis_ng_ui/src/js/common/consts/objectType.js
+++ b/openbis_ng_ui/src/js/common/consts/objectType.js
@@ -19,6 +19,7 @@ const USER = 'user'
 const USER_GROUP = 'userGroup'
 const DYNAMIC_PROPERTY_PLUGIN = 'dynamicPropertyPlugin'
 const ENTITY_VALIDATION_PLUGIN = 'entityValidationPlugin'
+const PERSONAL_ACCESS_TOKEN = 'personalAccessToken'
 const QUERY = 'query'
 const HISTORY = 'history'
 const IMPORT = 'import'
@@ -47,6 +48,7 @@ export default {
   USER_GROUP,
   DYNAMIC_PROPERTY_PLUGIN,
   ENTITY_VALIDATION_PLUGIN,
+  PERSONAL_ACCESS_TOKEN,
   QUERY,
   HISTORY,
   IMPORT,
diff --git a/openbis_ng_ui/src/js/common/consts/routes.js b/openbis_ng_ui/src/js/common/consts/routes.js
index 5b362e9e13eff3b42c10d7d2659f9a3e4a30f3e7..bd38ba0e716c1d5dd659c6cb0513415b8a0b0db1 100644
--- a/openbis_ng_ui/src/js/common/consts/routes.js
+++ b/openbis_ng_ui/src/js/common/consts/routes.js
@@ -214,6 +214,11 @@ const routes = {
     type: objectTypes.OVERVIEW,
     id: objectTypes.QUERY
   }),
+  PERSONAL_ACCESS_TOKEN_OVERVIEW: new Route('/personal-access-token-overview', {
+    page: pages.TOOLS,
+    type: objectTypes.OVERVIEW,
+    id: objectTypes.PERSONAL_ACCESS_TOKEN
+  }),
   HISTORY: new Route('/history/:id', {
     page: pages.TOOLS,
     type: objectTypes.HISTORY
diff --git a/openbis_ng_ui/src/js/common/messages.js b/openbis_ng_ui/src/js/common/messages.js
index 208b7da10abcb4d7633221a663c45a06098b358e..22f4c57b821f1f20f8bedb4cd86f2a6040ea19d7 100644
--- a/openbis_ng_ui/src/js/common/messages.js
+++ b/openbis_ng_ui/src/js/common/messages.js
@@ -1,5 +1,6 @@
 // prettier-ignore
 const keys = {
+  ACCESS: 'ACCESS',
   ACTIONS: 'ACTIONS',
   ACTIVATE_USER: 'ACTIVATE_USER',
   ACTIVE: 'ACTIVE',
@@ -142,6 +143,7 @@ const keys = {
   PARAMETERS: 'PARAMETERS',
   PARENTS: 'PARENTS',
   PASSWORD: 'PASSWORD',
+  PERSONAL_ACCESS_TOKENS: 'PERSONAL_ACCESS_TOKENS',
   PLAIN_TEXT: 'PLAIN_TEXT',
   PLUGIN: 'PLUGIN',
   PLUGIN_IS_DISABLED: 'PLUGIN_IS_DISABLED',
@@ -236,6 +238,7 @@ const keys = {
 
 // prettier-ignore
 const messages_en = {
+  [keys.ACCESS]: 'Access',
   [keys.ACTIONS]: 'Actions',
   [keys.ACTIVATE_USER]: 'Activate user',
   [keys.ACTIVE]: 'Active',
@@ -378,6 +381,7 @@ const messages_en = {
   [keys.PARAMETERS]: 'Parameters',
   [keys.PARENTS]: 'Parents',
   [keys.PASSWORD]: 'Password',
+  [keys.PERSONAL_ACCESS_TOKENS]: 'Personal Access Tokens',
   [keys.PLAIN_TEXT]: 'Plain Text',
   [keys.PLUGIN]: 'Plugin',
   [keys.PLUGIN_IS_DISABLED]: 'The plugin is disabled.',
diff --git a/openbis_ng_ui/src/js/components/tools/Tools.jsx b/openbis_ng_ui/src/js/components/tools/Tools.jsx
index 3c4ffc4664f0c0c86d8b30e440b6d5ea559e8458..54c4e47cef8530bd9e3b9ce253fb8b1b5a4c4442 100644
--- a/openbis_ng_ui/src/js/components/tools/Tools.jsx
+++ b/openbis_ng_ui/src/js/components/tools/Tools.jsx
@@ -9,6 +9,7 @@ import ToolBrowser from '@src/js/components/tools/browser/ToolBrowser.jsx'
 import ToolSearch from '@src/js/components/tools/search/ToolSearch.jsx'
 import PluginForm from '@src/js/components/tools/form/plugin/PluginForm.jsx'
 import QueryForm from '@src/js/components/tools/form/query/QueryForm.jsx'
+import PersonalAccessTokenForm from '@src/js/components/tools/form/pat/PersonalAccessTokenForm.jsx'
 import HistoryForm from '@src/js/components/tools/form/history/HistoryForm.jsx'
 import ImportForm from '@src/js/components/tools/form/import/ImportForm.jsx'
 import ImportType from '@src/js/components/tools/form/import/ImportType.js'
@@ -61,7 +62,11 @@ class Tools extends React.PureComponent {
     } else if (object.type === objectType.SEARCH) {
       return <ToolSearch searchText={object.id} />
     } else if (object.type === objectType.OVERVIEW) {
-      return <ToolSearch objectType={object.id} />
+      if (object.id === objectType.PERSONAL_ACCESS_TOKEN) {
+        return <PersonalAccessTokenForm />
+      } else {
+        return <ToolSearch objectType={object.id} />
+      }
     }
   }
 
@@ -79,6 +84,9 @@ class Tools extends React.PureComponent {
           messages.ENTITY_VALIDATION_PLUGINS
         ),
         [objectType.QUERY]: messages.get(messages.QUERIES),
+        [objectType.PERSONAL_ACCESS_TOKEN]: messages.get(
+          messages.PERSONAL_ACCESS_TOKENS
+        ),
         [objectType.HISTORY]: messages.get(messages.HISTORY)
       }
       label = labels[object.id]
diff --git a/openbis_ng_ui/src/js/components/tools/browser/ToolBrowserController.js b/openbis_ng_ui/src/js/components/tools/browser/ToolBrowserController.js
index 116ca61754ee41189344812ad15768c839a949c8..6cce15f5d4670ce7900a6d33edd2963e4c9bac7c 100644
--- a/openbis_ng_ui/src/js/components/tools/browser/ToolBrowserController.js
+++ b/openbis_ng_ui/src/js/components/tools/browser/ToolBrowserController.js
@@ -108,6 +108,19 @@ export default class ToolBrowserController extends BrowserController {
         }
       ]
 
+      const accessNodes = [
+        {
+          id: 'access/personalAccessTokens',
+          text: messages.get(messages.PERSONAL_ACCESS_TOKENS),
+          object: {
+            type: objectType.OVERVIEW,
+            id: objectType.PERSONAL_ACCESS_TOKEN
+          },
+          canMatchFilter: true,
+          canRemove: false
+        }
+      ]
+
       let nodes = [
         {
           id: 'dynamicPropertyPlugins',
@@ -153,6 +166,12 @@ export default class ToolBrowserController extends BrowserController {
           text: messages.get(messages.IMPORT),
           children: importNodes,
           canAdd: false
+        },
+        {
+          id: 'access',
+          text: messages.get(messages.ACCESS),
+          children: accessNodes,
+          canAdd: false
         }
       ]
 
diff --git a/openbis_ng_ui/src/js/components/tools/form/pat/PersonalAccessTokenForm.jsx b/openbis_ng_ui/src/js/components/tools/form/pat/PersonalAccessTokenForm.jsx
new file mode 100644
index 0000000000000000000000000000000000000000..317a2a5c3e94b08292688aee459beae0a7b6d07b
--- /dev/null
+++ b/openbis_ng_ui/src/js/components/tools/form/pat/PersonalAccessTokenForm.jsx
@@ -0,0 +1,9 @@
+import React from 'react'
+
+class PersonalAccessTokenForm extends React.PureComponent {
+  render() {
+    return <div>Personal Access Token Form</div>
+  }
+}
+
+export default PersonalAccessTokenForm