opensheet
OpenSheet
Eine Datenbank-UI ohne Datenbank.
Ihre Tabellen sind einfache .jsonl-Dateien auf der Festplatte. Bearbeiten Sie eine Zelle — git diff zeigt eine Zeile.
Schließen Sie OpenSheet, und jq, DuckDB, Excel, pandas und Ihre KI-Agenten können weiterhin alles lesen.
Was ist das
Tabellenkalkulations-Datenbank-Tools müssen Ihre Zeilen irgendwo ablegen. Die üblichen Antworten sind eine Datenbank, die Sie auch betreiben müssen, eine Speicher-Engine, die mit der App geliefert wird, oder eine einzelne Binärdatei im eigenen Format der App. Alle drei funktionieren. Alle drei bedeuten, dass das Tool zwischen Ihnen und Ihren Daten sitzt.
OpenSheets Quelle der Wahrheit ist eine Textdatei, die Sie bereits lesen können. Ein Ordner ist eine Bibliothek,
jede .jsonl-Datei darin ist eine Tabelle, eine Zeile ist ein Datensatz. Es gibt keine Datenbank, kein Konto, keinen Server,
keine Synchronisierung. Löschen Sie OpenSheet und Ihre Daten bewegen sich keinen Millimeter.
$ cat my-library/campaigns.jsonl
{"id":"KS-001","project":"Modular Mechanical Keyboard","raised_usd":412870,"rating":5}
{"id":"KS-002","project":"Solar Camp Lantern","raised_usd":88250,"rating":4}
$ jq -r 'select(.rating == 5) | .project' my-library/campaigns.jsonl
Modular Mechanical KeyboardDas ist das gesamte Speicherformat. Die Tabellenkalkulations-UI ist eine Ansicht darauf, kein Wrapper darum.
Related MCP server: Universal JSON Agent MCP
Schnellstart
Erfordert Python 3.9+. Kein pip install, kein Docker, kein Build-Schritt.
git clone https://github.com/newgepard/opensheet
cd opensheet
PYTHONPATH=src python3 -m opensheet ~/my-library/Es öffnet http://127.0.0.1:<freier Port> in Ihrem Browser. Richten Sie es auf einen Ordner mit .jsonl-Dateien, auf eine
einzelne .jsonl-Datei oder auf einen leeren Ordner, um von Grund auf zu beginnen.
macOS-Desktop-App — eine 860 KB native Shell (Swift + WKWebView, nutzt das System-WebKit):
bash shell/build.sh
open shell/build/OpenSheet.appDas Fidelity-Versprechen
Darauf ist alles andere aufgebaut, und es wird getestet statt nur behauptet.
1. Unberührte Zeilen werden byte-für-byte zurückgeschrieben. Bearbeiten Sie eine Zelle in einer Tabelle mit 10.000 Zeilen und
git diff zeigt genau eine geänderte Zeile. Zeilen, die Sie nicht berührt haben, werden nie neu serialisiert — nicht
neu sortiert, nicht neu formatiert, nicht neu maskiert.
2. Nicht-ASCII-Text wird nie maskiert. {"名前":"甲"} bleibt exakt so. Es wird nie zu
{"\u540d\u524d":"\u7532"}, was json.dumps standardmäßig tut und was eine Datei
in jedem Tool unlesbar macht, das kein JSON-Parser ist.
3. Spärliche Dateien bleiben spärlich. Wenn eine Zeile keinen Schlüssel hat, erfindet OpenSheet keinen für sie. Das Hinzufügen eines Felds zu einer Tabelle mit 50.000 vorhandenen Zeilen schreibt keine davon neu.
Undo ist als inverse Befehle aufgebaut, nicht als Snapshot-Rollback, speziell damit Versprechen 1 es übersteht:
Bearbeiten Sie eine Zelle, drücken Sie ⌘Z, speichern — git diff ist leer. Eine Snapshot-Wiederherstellung würde
auf dem Bildschirm korrekt aussehen, während sie stillschweigend jede berührte Zeile neu serialisiert.

Unterstützt wird dies durch einen Fingerabdruck-Check, der sich weigert, Änderungen zu überschreiben, die hinter OpenSheets
Rücken vorgenommen wurden; Schreibvorgänge laufen über eine temporäre Datei plus os.replace(), und jeder Speichervorgang
behält eine .bak-Datei neben einem Snapshot zum Öffnungszeitpunkt.
Funktionen
Ihre Daten sind eine Datei, die Ihnen gehört — einfaches
.jsonl, lesbar mitjq, DuckDB, pandas, Excel und gitAlles rückgängig machen —
⌘Z/⇧⌘Z; ein Stapel-Löschen wird zu einem einzigen Undo-Schritt zusammengefasst13 Feldtypen — Text, Zahl, Auswahl, Mehrfachauswahl, Datum, Kontrollkästchen, URL, Anhang, Formel, tabellenübergreifende Suche, Erstellt-/Aktualisiert-Zeit, Auto-Nummer. Zahlen werden als Fortschrittsbalken, Währung, Bewertungen oder Prozentsätze dargestellt ohne den gespeicherten Wert zu ändern
4 Ansichtstypen — Raster, Kanban, Galerie, plus Filter, Sortierungen, Gruppierung, Statistiken, Zeilenhöhe, eingefrorene Spalten und Spaltenreihenfolge pro Ansicht
10.000 Zeilen bleiben flüssig — virtuelles Scrollen; gemessen bei 57 ms zum Laden und 59 ms zum Speichern einer 7,5 MB großen Tabelle
Import und Export — hinein aus CSV, XLSX, JSON, SQLite und
.grist; hinaus nach CSV, XLSX, JSON, JSONL, Markdown und ParquetAnhänge bleiben lokal — Dateien landen in
<library>/assets/, die Zelle enthält einen relativen Pfad, nichts wird irgendwohin hochgeladen
Für Agenten gebaut, nicht mit KI dekoriert
Einen KI-Button zu einer Tabellenkalkulation hinzuzufügen ist ein Feature. Ein Speicherformat zu wählen, das ein Agent ohne
Adapter lesen und schreiben kann, ist eine Architektur. OpenSheet hat das Zweite getan, und alles andere folgt
daraus: Die Datei ist zeilenorientiert, sodass Anhängen >> ist, das Format ist Text, sodass grep funktioniert,
und der Schreiber ist singulär, sodass Byte-Fidelity gleichzeitigen Zugriff übersteht.
Ein MCP-Server läuft im selben Prozess wie der HTTP-Server und teilt sich eine Store-Instanz:
{
"mcpServers": {
"opensheet": {
"command": "python3",
"args": ["-m", "opensheet", "/path/to/libraries", "--mcp", "--mcp-root", "/path/to/libraries"],
"env": { "PYTHONPATH": "/path/to/opensheet/src" }
}
}
}Werkzeuge: list_libraries, list_tables, get_schema, query, upsert_rows.
upsert_rows gibt eine Quittung zurück — inserted / updated / unchanged-Zählungen plus die Primärschlüssel
für jede — und unterstützt dry_run. Zeilen, die mit dem identisch sind, was bereits auf der Festplatte liegt, zählen als unchanged,
und die Datei wird nicht angefasst.
Derselbe Prozess ist kein Implementierungsdetail. Byte-Fidelity hängt vom In-Process-Zustand ab: von welchen Bytes jede Zeile angekommen ist. Zwei Prozesse, die jeweils ihre eigene Kopie halten, würden jeweils schlussfolgern, dass die Schreibvorgänge des anderen "Änderungen" wären und die gesamte Datei beim nächsten Speichern neu serialisieren. Ein zweiter Prozess erkennt die Sperrdatei und leitet an den ersten weiter, sodass es immer genau einen Schreiber gibt.
Agenten können OpenSheet auch überspringen und direkt an die Datei anhängen. Die Regeln, die Fidelity intakt halten, wenn sie das tun, sind im Direct-Write-Leitfaden dokumentiert.
Architektur
graph TD
A["my-library/"] --> B["campaigns.jsonl<br/>source of truth"]
A --> C["suppliers.jsonl"]
A --> D[".opensheet/<br/>schema · views · links"]
B --> E["store.py<br/>row passthrough · atomic write"]
C --> E
E --> F["single process"]
F --> G["HTTP + browser UI"]
F --> H["MCP over stdio"]
G --> I["native macOS shell"].opensheet/ enthält Feldtypen, Spaltenbreiten, Ansichtsdefinitionen und tabellenübergreifende Verknüpfungen. Löschen Sie es und
Sie verlieren Formatierung, nicht Daten — Feldtypen fallen auf Inferenz zurück.
Warum es klein bleibt
Das Backend ist nur die Python-Standardbibliothek. Das Frontend ist einfaches JavaScript — kein Framework, kein Build-Schritt. Die macOS-Shell ist 184 KB Swift auf dem System-WebKit, kein gebündelter Browser.
DuckDB ist optional und schreibgeschützt und bedient das SQL-Panel und den Parquet-Export. Es nimmt nie an
Filtern, Sortieren oder Gruppieren teil, und es schreibt nie. Jeder Schreibvorgang läuft über store.py.
Kein Netzwerk, konstruktionsbedingt
Keine Telemetrie, keine Update-Checks, keine CDN-Assets, keine Online-Demo. Der Browser fordert nur Same-Origin
/api/*-Pfade an, der Server bindet nur an die IPv4-Loopback-Adresse, und die Desktop-Shell hält null eigene
TCP-Verbindungen. tests/test_offline.py erzwingt all dies.
Verifikation
bash tests/opensheet-全量验收-20260815.sh329 Tests: 188 JavaScript-Unit, 83 Python, 42 Browser-End-to-End (Playwright), 8 Fidelity-Round-Trip, 8 Bibliotheks-Round-Trip. Die Fidelity-Tests vergleichen Dateien byte-für-byte statt Feld-für-Feld — ein Test, der nur Werte prüfte, würde bestehen, während Versprechen 1 stillschweigend gebrochen wäre.
Browser-Tests benötigen npm install innerhalb von web/ für Playwrights Chromium.
Was OpenSheet nicht tun wird
Kommentare, Berechtigungen, Echtzeit-Zusammenarbeit, Automatisierungen, eine gehostete Version, eine Online-Demo. Jede davon benötigt ein Kontosystem oder eine öffentliche Adresse, was der ersten Design-Einschränkung widerspricht: Daten verlassen nie Ihren Rechner.
Dies ist eine bewusste Grenze, keine Roadmap-Lücke.
Status
Funktioniert und wird täglich genutzt, mit zwei rauen Kanten, die Sie kennen sollten, bevor Sie es ausprobieren:
Die UI ist derzeit nur auf Chinesisch. Code, Kommentare und Oberflächentexte sind alle auf Chinesisch. Eine englische Lokalisierung wurde noch nicht durchgeführt.
Nur macOS für die Desktop-Shell. Die Webversion läuft überall, wo Python läuft.
Mitwirken
Issues und PRs sind willkommen. Zwei Dinge, die Sie wissen sollten, bevor Sie die Speicherschicht anfassen:
Die Zeilen-Passthrough-Logik in
store.pyist das Produkt. Sie zu ändern bedeutet, die Fidelity- Tests grün zu halten, und diese vergleichen Bytes, nicht Felder.Code-Kommentare sind derzeit auf Chinesisch. Übersetzungshilfe ist sehr willkommen.
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 Connectors
The all-in-one data stack for agents. Upload files, run SQL, evolve tables, and render charts.
Database for your AI agent. Turn its output into data, docs, skills, and apps you can actually use.
Zero-key temporary JSON database for agents: one tool call, no signup, no OAuth, no API keys.
Connect AI assistants to Google Sheets through controlled tools for reading and updating rows.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceProvides AI agents with database-like operations over LanceDB with automatic BGE-M3 multilingual embedding generation, enabling semantic search, CRUD operations, and safe schema migrations across structured data.
- AlicenseNot gradedqualityCmaintenanceEnables natural language interaction with JSON files, providing tools to load, query, aggregate, transform, and export data directly from AI editors.3MIT
- AlicenseAqualityBmaintenanceTurns a folder of CSV, Parquet, and JSON files into a single SQL-queryable source for AI agents, supporting JOINs across files with read-only sandboxed access.62MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to read, write, query, and manage JSON data files with automatic ID and timestamp generation.6201MIT
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/newgepard/opensheet'
If you have feedback or need assistance with the MCP directory API, please join our Discord server