Skip to main content
Glama
newgepard

opensheet

by newgepard

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.

License: MIT Runtime dependencies: 0 Tests: 329 Network calls: 0

中文文档


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 Keyboard

Das 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.app

Das 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.

Editing one cell; git diff shows a single changed line

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 mit jq, DuckDB, pandas, Excel und git

  • Alles rückgängig machen⌘Z / ⇧⌘Z; ein Stapel-Löschen wird zu einem einzigen Undo-Schritt zusammengefasst

  • 13 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 Parquet

  • Anhä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.sh

329 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:

  1. Die Zeilen-Passthrough-Logik in store.py ist das Produkt. Sie zu ändern bedeutet, die Fidelity- Tests grün zu halten, und diese vergleichen Bytes, nicht Felder.

  2. Code-Kommentare sind derzeit auf Chinesisch. Übersetzungshilfe ist sehr willkommen.

Lizenz

MIT — siehe LICENSE.

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

Maintenance

0Releases (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 Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides 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.
  • A
    license
    A
    quality
    B
    maintenance
    Turns 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.
    6
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to read, write, query, and manage JSON data files with automatic ID and timestamp generation.
    6
    20
    1
    MIT

View all related MCP servers

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/newgepard/opensheet'

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