peek
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.appAlternativ: 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/outIn 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 testHinweise: 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 |
| Siehe die aktuelle Benutzeroberfläche: Layout, Tabs, Ergebnisstatus, Verbindungen. Gibt niemals Zeilendaten zurück. |
| Jede Verbindung mit Treiber, Status und Fähigkeiten; Geheimnisse maskiert. |
| Öffne eine Datenbankverbindung. |
| Erweitere den Namespace-Baum (db → Schema → Tabelle); gibt die Referenzen zurück, die |
| Zeige eine Ansicht auf dem Bildschirm: |
| 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. |
| Deklariere den gesamten Panel-Baum in einem Aufruf – mehrere Ansichten nebeneinander zum Vergleich. |
| Ändere die Größe einer Teilung, wie das Ziehen eines Teilers. |
| Verschiebe eine Ansicht in ein anderes Panel, als Tab oder als Teilung. |
| Bringe einen Hintergrund-Tab nach vorne. |
| Stoppe eine laufende Abfrage. |
| Steuere das Chat-Panel von außen: Nachrichten senden, Transkript lesen, Sitzung verwalten. |
| Benachrichtige den Benutzer, auch wenn peek nicht das vorderste Fenster ist. |
| 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: Bearererforderlich,Host/Origingegen 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.jsonlesen 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) |
| 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.
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage and query SQLite databases through MCP tools, supporting CRUD operations, schema management, and saved views.4MIT
- FlicenseNot gradedqualityFmaintenanceA read-only MCP server that enables AI agents to explore database schemas and execute safe queries on PostgreSQL and MySQL.
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to explore MySQL database schemas and execute read-only queries through a safe, MCP interface.
- AlicenseNot gradedqualityBmaintenanceProvides read-only access to databases for MCP-compatible AI tools, allowing schema exploration and SELECT queries without exposing credentials or risking data changes.923MIT
Related MCP Connectors
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
Read-only Remote MCP for externally grounded AI agent trust receipts.
GibsonAI MCP server: manage your databases with natural language
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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