Skip to main content
Glama
Gyangu
by Gyangu

Jeder Screenshot in dieser README wurde durch einen einzigen set_layout-MCP-Aufruf erzeugt – siehe apps/desktop/scripts/screenshot.mjs.

peek ist eine Desktop-Datenbank-GUI, die gleichzeitig als MCP-Server dient. Bitte Claude, eine Tabelle zu öffnen, eine Abfrage auszuführen oder Panels zum Vergleich anzuordnen – es geschieht im Fenster vor dir, weil KI-Tool-Aufrufe und deine eigenen Klicks einen gemeinsamen Befehls-Kanal nutzen. Ein integriertes Chat-Panel führt Claude Code in der App aus, sodass der Agent, mit dem du sprichst, das Fenster steuert, in dem er lebt.

Features

  • 🤝 Eine Oberfläche für Mensch und KI – jeder Klick und jeder MCP-Tool-Aufruf ist ein Befehl auf demselben Bus; kein Schattenzustand, kein Synchronisierungsschritt

  • 💬 Claude Code integriert – das Chat-Panel hostet es über ACP, verbunden mit peeks eigenem MCP-Server

  • 🛠️ 16 MCP-Tools – verbinden, Schemata untersuchen, Abfragen ausführen, Ansichten öffnen, Layout steuern, benachrichtigen, den Benutzer fragen

  • 🔒 Nur lesen, vom Server erzwungen – Nur-Lese-Transaktionen und Flags, keine Schlüsselwortfilterung

  • 📎 Daten erreichen die KI nur, wenn du sie anhängst – andernfalls gibt eine Abfrage dem Modell höchstens 20 Zeilen zurück

  • 📦 Datenbanken sind Plugins – sechs Treiber werden aus ~/.peek/packages/<id>/ geladen; einen hinzuzufügen bedeutet, ein Verzeichnis zu installieren

  • Eine Million Zeilen scrollen – 0 verworfene Frames, ~0,5 s Start, 6,3 MB Bundles (Leistung)

  • 🔑 Passwörter liegen im OS-Schlüsselbund – nie im Klartext auf der Platte

Datenbanken: PostgreSQL · MySQL · SQLite · Redis · Qdrant · Neo4j

Related MCP server: MCP Server for Database

Installation

Lade peek-v0.0.1-macos-arm64.zip von Releases herunter, entpacke es und lege peek.app in den Programme-Ordner. Nur Apple Silicon vorerst.

Dieser Build ist ad-hoc signiert (noch keine Developer ID), daher wird macOS die heruntergeladene App beim ersten Start als „beschädigt" ablehnen. Entferne einmal das Quarantäne-Flag und sie öffnet normal:

xattr -d com.apple.quarantine /Applications/peek.app

Alternativ: Systemeinstellungen → Datenschutz & Sicherheit → „Trotzdem öffnen". Ein signierter und notarisierter Build ist geplant.

Schnellstart

Voraussetzungen: Node ≥ 22, pnpm 10.32.1 (festgelegt über packageManager) und eine Datenbank, auf die du zeigen kannst. Bisher nur auf macOS / Apple Silicon entwickelt und getestet.

pnpm install
pnpm dev              # opens the window; MCP server on port 7332
pnpm build            # production bundles into apps/desktop/out

In der App: Wähle einen Treiber in der Seitenleiste, füge eine Verbindungszeichenfolge ein und durchsuche. Verbindungen, die einen Handshake abschließen, werden automatisch gespeichert (Passwörter gehen in den OS-Schlüsselbund). Tabellen öffnen sich als virtualisierte Raster, SQL läuft in einem CodeMirror-Editor mit ⌘⏎, Panels teilen sich mit ⌘\ / ⌘⇧\, und jede Ergebnisansicht hat eine Abbrechen-Schaltfläche, die auf einer echten Frist basiert.

Tests

pnpm -r typecheck     # strict TS across every package
pnpm -r test          # 2567 tests; driver suites need real servers (see below)

Die Desktop-Suite ist reine Logik und benötigt nichts. Jede Treiber-Suite ist eine Integrations-Suite, die ihr Ziel aus der Umgebung liest und sich selbst überspringt, wenn der Server nicht erreichbar ist:

PEEK_TEST_PG_URL="postgresql://user@localhost:5432/your_db" \
PEEK_TEST_REDIS_URL="redis://localhost:6379" \
PEEK_TEST_QDRANT_URL="http://localhost:6333" \
PEEK_TEST_MYSQL_URL="mysql://root:pw@localhost:3306/peek_test" \
PEEK_TEST_NEO4J_URL="bolt://localhost:7687" PEEK_TEST_NEO4J_PASSWORD="…" \
pnpm -r test

Hinweise: Die Redis-/Qdrant-/MySQL-/SQLite-Suiten erstellen und bereinigen ihre eigenen Fixtures; die PostgreSQL-Suite prüft derzeit gegen eine bestimmte Entwicklungsdatenbank (Selbstbereitstellung ist ein TODO); Neo4j benötigt immer ein explizites Passwort. Es gibt auch einen End-to-End-Smoke-Test der gebauten App (smoke-drivers.mjs), der jeden konfigurierten Treiber über MCP steuert.

Verwendung mit Claude Code

peek startet seinen MCP-Server beim Start (nur Loopback, Bearer-Token-Authentifizierung) und schreibt den Endpunkt nach ~/.peek/mcp.json (Modus 0600). Einmal registrieren:

claude mcp add peek --transport http http://127.0.0.1:7332/mcp \
  --header "Authorization: Bearer <token from ~/.peek/mcp.json>"

Der genaue Befehl mit ausgefülltem Token ist einen Klick entfernt in Einstellungen → MCP-Endpunkt, wo du auch den Port ändern oder das Token rotieren kannst.

Die Tools

Tool

Zweck

read_workspace

Siehe die aktuelle Benutzeroberfläche: Layout, Tabs, Ergebnisstatus, Verbindungen. Gibt niemals Zeilendaten zurück.

list_connections

Jede Verbindung mit Treiber, Status und Fähigkeiten; Geheimnisse maskiert.

connect

Öffne eine Datenbankverbindung.

introspect

Erweitere den Namespace-Baum (db → Schema → Tabelle); gibt die Referenzen zurück, die open_view benötigt.

open_view

Zeige eine Ansicht auf dem Bildschirm: table, query, inspector, tree, vector.

run_query

Führe eine Anweisung aus. Die KI erhält die ersten 20 Zeilen plus die Anzahl; das vollständige Ergebnis bleibt in der Benutzeroberfläche.

set_layout

Deklariere den gesamten Panel-Baum in einem Aufruf – mehrere Ansichten nebeneinander zum Vergleich.

set_ratio

Ändere die Größe einer Teilung, wie das Ziehen eines Teilers.

move_view

Verschiebe eine Ansicht in ein anderes Panel, als Tab oder als Teilung.

activate_view

Bringe einen Hintergrund-Tab nach vorne.

cancel_query

Stoppe eine laufende Abfrage.

send_chat / read_chat / control_chat

Steuere das Chat-Panel von außen: Nachrichten senden, Transkript lesen, Sitzung verwalten.

notify

Benachrichtige den Benutzer, auch wenn peek nicht das vorderste Fenster ist.

ask

Stelle dem Benutzer eine Multiple-Choice-Frage und warte auf die Antwort.

Es gibt bewusst kein Tool, das dem Modell einen vollständigen Ergebnissatz übergibt.

Das Chat-Panel

Ein ask-Aufruf, der pausiert, bis der Mensch antwortet – Agenten können ihre eigenen Fragen nicht beantworten.

Du musst keinen eigenen Client mitbringen: peek hostet Claude Code selbst, als Tab. Der eingebettete Agent startet ohne Datei-Tools, ohne Shell und ohne andere MCP-Server als peeks eigene – er erbt nicht deine settings.json, CLAUDE.md oder konfigurierten MCP-Server, und verify-chat-security.mjs prüft das gegen den echten Agenten. Zwei Einstellungen (beide standardmäßig deaktiviert) ermöglichen es dir, dich wieder anzumelden: Datei-/Befehls-Tools und eigene MCP-Server. Jede erklärt ihre Kosten neben dem Schalter – siehe Sicherheitsmodell.

Sicherheitsmodell

  • MCP-Server: nur Loopback, Authorization: Bearer erforderlich, Host/Origin gegen DNS-Rebinding geprüft, Token in konstanter Zeit verglichen und nie protokolliert.

  • Nur lesen: vom Datenbankserver erzwungen, wo immer möglich (Transaktionen, Flags); Redis- und Qdrant-Treiber geben einfach keinen Schreibbefehl aus. Eine Lücke: eine bereits vorhandene gespeicherte Prozedur, die eine eigene Lese-Schreib-Transaktion öffnet – verwende ein Nur-Lese-Datenbankkonto für alles, was dir wichtig ist.

  • Prozessisolation: Treiber laufen in einem Kindprozess pro Verbindung; eine festgefahrene Abfrage oder ein Absturz kann das Fenster nicht zum Einsturz bringen, und das Töten des Prozesses ist ein bedingungsloser Abbruch. Paketcode läuft nie im Hauptprozess.

  • Pakete werden vertraut, nicht sandboxed. Was du installierst, ist das, dem du vertraust – das gleiche Angebot wie eine VS-Code-Erweiterung oder ein MCP-Server. peek validiert die Manifestform eines Pakets, isoliert seine Prozesse und entfernt Anmeldeinformationen aus ihrer Umgebung, aber es gibt keine Signaturprüfung und keine Sandbox. Details in den Design-Dokumenten.

  • Das Aktivieren der Datei-Tools des Agenten hat echte Kosten: Ein Agent, der ~/.peek/mcp.json lesen kann, besitzt das Bearer-Token, und Berechtigungsaufforderungen sind keine Barriere mehr. Das Einstellungsfeld sagt genau das, wenn der Schalter eingeschaltet ist.

Leistung

Gemessen auf einem Apple M2 Max (macOS, 120 Hz Retina) gegen eine generierte SQLite-Fixture mit 1.000.000 Zeilen, mit zwei reproduzierbaren Benchmark-Skripten (bench-startup.mjs, bench-scroll.mjs):

Szenario

Ergebnis

Start → Fenster bereit (warm)

Median 518 ms

Scrollen von 1.000.000 Zeilen, 600 Frames

0 verworfene Frames

DOM-Elemente im Raster bei 1.000.000 Zeilen

< 400 (durch den Viewport begrenzt, nicht durch die Daten)

run_query über 1.000.000 Zeilen, Ende zu Ende

2,1 s

Gebaute Bundles

6,3 MB insgesamt

Ergebnisse streamen als spaltenweise Blöcke mit Backpressure und einem LRU-Cache, und das virtuelle Scrollen ist handgeschrieben, weil Chromium Elementhöhen bei Retina-Auflösung um 699.000 Zeilen stillschweigend begrenzt – keine DOM-Dimension in peek wird aus der Zeilenanzahl abgeleitet.

Status und Einschränkungen

Früh, aber real: Alle sechs Datenbanken verbinden, untersuchen und streamen Zeilen; das Layout, Chat, MCP-Oberfläche und Paketsystem, die oben beschrieben sind, sind implementiert und getestet. pnpm build erzeugt Bundles, und package-mac.mjs erzeugt eine macOS-.app; es gibt noch keinen signierten Installer. Schreibvorgänge sind bewusst außerhalb des Rahmens, bis der Nur-Lese-Pfad vollständig stabilisiert ist.

Bekannte Einschränkungen, kurz (Details in docs/PLAN.md und docs/design/):

  • Eine große Abfrage pausiert (by design) bei ~200k Zeilen, bis du weiter scrollst; Zeilen, die aus dem ~200-MB-Cache verdrängt wurden, können nicht an Ort und Stelle erneut abgerufen werden – führe die Abfrage erneut aus.

  • Feste Zeilenhöhe von 24 px; große Werte öffnen sich in einem Modal.

  • Barrierefreiheit ist auf Layout-Ebene solide (ARIA-Tablisten, wandernder Tabindex, Fokusverwaltung), aber minimal innerhalb der Panel-Körper und nicht gegen einen echten Screenreader verifiziert.

  • Ein wiederhergestellter Arbeitsbereich öffnet Layout, Tabs und Editor-Text erneut, führt aber nie Abfragen erneut aus.

  • Qdrant: keine Abfrageabbrechung (die API bietet keine – der Button sagt das), und Tabellenköpfe können noch nicht sortieren.

  • Gespeicherte Anmeldeinformationen sind so privat wie dein OS-Benutzerkonto; binäre Signierung kommt mit dem ersten veröffentlichten Build.

Repository-Layout

peek/
├─ packages/
│  ├─ core/           # command schemas, workspace types, capability + chunk protocol, driver-host runtime
│  ├─ db-postgres/    # PostgreSQL driver
│  ├─ db-sql/         # MySQL + SQLite behind one dialect layer
│  ├─ db-redis/       # Redis driver
│  ├─ db-qdrant/      # Qdrant driver
│  └─ db-neo4j/       # Neo4j driver, plus the `graph` view kind
├─ apps/desktop/      # Electron app: main / preload / renderer, plus scripts/ (benchmarks, smoke tests)
└─ docs/              # PLAN.md (design record) and docs/design/ (per-change design docs)

docs/PLAN.md ist die maßgebliche Design-Dokumentation — Architekturentscheidungen, das Leistungsbudget und Meilenstein-Definitionen (PLAN.zh-CN.md ist das chinesische Original). Design-Dokumente für einzelne Änderungen liegen in docs/design/.

Lizenz

MIT. Siehe LICENSE.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage and query SQLite databases through MCP tools, supporting CRUD operations, schema management, and saved views.
    4
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides read-only access to databases for MCP-compatible AI tools, allowing schema exploration and SELECT queries without exposing credentials or risking data changes.
    92
    3
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Gyangu/peek-viewer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server