diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php
index 80d59123c68878c9335e76c11ad2fff8e872548d..caf56bbb0f08b5e0939a1d31b328e3c81101e69d 100644
--- a/src/Controller/AdminController.php
+++ b/src/Controller/AdminController.php
@@ -2,6 +2,7 @@
 
 namespace App\Controller;
 
+use App\Entity\Server;
 use App\Entity\Users;
 use App\Entity\WebResetter;
 use App\Repository\ServerRepository;
@@ -160,4 +161,33 @@ class AdminController extends AbstractController
             'expandedDevice'=> $deviceID
         ]);
     }
+
+    #[Route('/admin/servers/{expandedDevice}', name: 'app_admin_servers', methods: ['GET'])]
+    public function getServers(ServerRepository $serverRepository, int $expandedDevice = -1): Response {
+        return $this->render('pages/admin/server.html.twig', [
+           'servers' => $serverRepository->findAll(),
+           'expandedId' => $expandedDevice
+        ]);
+
+    }
+
+    #[Route('/admin/servers', name: 'app_admin_servers_edit', methods: ['POST'])]
+    public function editServer(ServerRepository $serverRepository, Request $request, ManagerRegistry $doctrine): Response
+    {
+        $server = $serverRepository->findOneBy(['id' => $request->request->get('server')]);
+        if (!$server) {
+            $server = new Server();
+            $doctrine->getManager()->persist($server);
+        }
+
+        $server->setName($request->request->get('name'));
+        $server->setIpAddress($request->request->get('ipaddress'));
+        $server->setApikey($request->request->get('apikey'));
+
+        $doctrine->getManager()->flush();
+
+        return $this->redirectToRoute('app_admin_servers', [
+            'expandedDevice' => $server->getId()
+        ]);
+    }
 }
\ No newline at end of file
diff --git a/src/Twig/Components/ServerAccordionComponent.php b/src/Twig/Components/ServerAccordionComponent.php
new file mode 100644
index 0000000000000000000000000000000000000000..9139924657ecb1c54006cb6ae7639ea354121797
--- /dev/null
+++ b/src/Twig/Components/ServerAccordionComponent.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Twig\Components;
+
+use App\Entity\Server;
+use Symfony\UX\TwigComponent\Attribute\AsTwigComponent;
+
+#[AsTwigComponent('server_accordion')]
+final class ServerAccordionComponent
+{
+    public ?Server $server;
+    public bool $expanded = false;
+
+    public function __construct()
+    {
+        if (!isset($this->server)) {
+            $this->server = new Server();
+        }
+    }
+}
diff --git a/templates/components/header.html.twig b/templates/components/header.html.twig
index 7c98d6aa567ff3076077ca629ddf4f0f3cf6b82c..8ebbfa615748ca53be095fe5a0bcab84f5d343bd 100644
--- a/templates/components/header.html.twig
+++ b/templates/components/header.html.twig
@@ -8,6 +8,7 @@
                 {% if is_granted('ROLE_ADMIN') %}
                     {{ component('nav_item', {page: 'app_admin_users', title: 'Users'}) }}
                     {{ component('nav_item', {page: 'app_admin_devices', title: 'Devices'}) }}
+                    {{ component('nav_item', {page: 'app_admin_servers', title: 'Servers'}) }}
                 {% endif %}
             </ul>
 
diff --git a/templates/components/server_accordion.html.twig b/templates/components/server_accordion.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..974649e7a87bfa54ecffd5877fc6311a475fb823
--- /dev/null
+++ b/templates/components/server_accordion.html.twig
@@ -0,0 +1,33 @@
+<div class="accordion-item">
+    <h2 class="accordion-header" id="headingserver{{ server.id }}">
+        <button class="accordion-button {% if not expanded %}collapsed{% endif %}" type="button" data-bs-toggle="collapse" data-bs-target="#collapseserver{{ server.id }}" aria-expanded="true" aria-controls="collapseserver{{ server.id }}">
+            {% if server.id %}
+                {{ server.name }}
+            {% else %}
+                Create new Server
+            {% endif %}
+        </button>
+    </h2>
+    <div id="collapseserver{{ server.id }}" class="accordion-collapse collapse {% if expanded %}show{% endif %}" aria-labelledby="headingserver{{ server.id }}" data-bs-parent="#accordionExample">
+        <div class="accordion-body">
+            <form method="post" action="{{ path('app_admin_servers_edit') }}">
+                <input type="hidden" name="server" value="{{ server.id ?: 'new' }}">
+                <div class="mb-3">
+                    <label for="displayNameInput" class="form-label">Name</label>
+                    <input type="text" class="form-control" id="displayNameInput" name="name" placeholder="My Server" value="{{ server.name }}">
+                </div>
+                <div class="mb-3">
+                    <label for="displayIpInput" class="form-label">IP Address</label>
+                    <input type="text" class="form-control" id="displayIpInput" name="ipaddress" placeholder="192.168.0.1" value="{{ server.ipAddress }}" maxlength="15">
+                </div>
+                <div class="mb-3">
+                    <label for="displayApikeyInput" class="form-label">API Key</label>
+                    <input type="text" class="form-control" id="displayApikeyInput" name="apikey" placeholder="verysecureapikey" value="{{ server.apikey }}">
+                </div>
+                <div class="mb-3">
+                    <button class="btn btn-primary"><i class="fa-solid fa-save" aria-hidden="true"></i>&nbsp;Save</button>
+                </div>
+            </form>
+        </div>
+    </div>
+</div>
\ No newline at end of file
diff --git a/templates/pages/admin/server.html.twig b/templates/pages/admin/server.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..8fdfbe370b9b87787417bf0e7e741e558909b83d
--- /dev/null
+++ b/templates/pages/admin/server.html.twig
@@ -0,0 +1,12 @@
+{% extends 'page.html.twig' %}
+{% block title %}Devices{% endblock %}
+{% block content %}
+    <div class="container">
+        <div class="accordion">
+            {% for server in servers %}
+                {{ component('server_accordion', {server: server, expanded: server.id == expandedId}) }}
+            {% endfor %}
+            {{ component('server_accordion') }}
+        </div>
+    </div>
+{% endblock %}
\ No newline at end of file