opensheet
OpenSheet
データベースなしのデータベースUI。
テーブルはディスク上のプレーンな .jsonl ファイルです。1つのセルを編集すると、git diff には1行だけが表示されます。
OpenSheetを閉じても、jq、DuckDB、Excel、pandas、そしてAIエージェントはすべてを読み取ることができます。
これは何か
スプレッドシート型データベースツールは、行をどこかに保存する必要があります。一般的な答えは、自分で起動しなければならないデータベース、アプリに同梱されるストレージエンジン、またはアプリ独自の形式の単一バイナリファイルです。どれも機能します。しかし、どれもツールがあなたとデータの間に立ちはだかることを意味します。
OpenSheetの信頼できる情報源は、あなたがすでに読み方を知っているテキストファイルです。1つのフォルダがライブラリ、その中の各 .jsonl がテーブル、1行がレコードです。データベースも、アカウントも、サーバーも、同期もありません。OpenSheetを削除しても、データは1ミリも動きません。
$ 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これがストレージ形式のすべてです。スプレッドシートUIは、それを包み込むラッパーではなく、それに対するビューです。
Related MCP server: Universal JSON Agent MCP
クイックスタート
Python 3.9+ が必要です。pip installも、Dockerも、ビルドステップも不要です。
git clone https://github.com/newgepard/opensheet
cd opensheet
PYTHONPATH=src python3 -m opensheet ~/my-library/ブラウザで http://127.0.0.1:<空きポート> が開きます。.jsonl ファイルのフォルダ、単一の .jsonl ファイル、またはゼロから始めるための空のフォルダを指定します。
macOSデスクトップアプリ — 860 KBのネイティブシェル(Swift + WKWebView、システムのWebKitを使用):
bash shell/build.sh
open shell/build/OpenSheet.app忠実性の約束
これが他のすべての基盤であり、断言ではなくテストされています。
1. 触っていない行はバイト単位でそのまま書き戻されます。 10,000行のテーブルで1つのセルを編集すると、git diff には正確に1行の変更だけが表示されます。触っていない行が再シリアライズされることはありません — 並べ替えも、再フォーマットも、再エスケープもされません。
2. 非ASCIIテキストは決してエスケープされません。 {"名前":"甲"} はそのまま維持されます。json.dumps がデフォルトで行い、JSONパーサー以外のすべてのツールでファイルを読めなくする {"\u540d\u524d":"\u7532"} に変わることは決してありません。
3. スパースファイルはスパースのままです。 行にキーがない場合、OpenSheetはそのキーを勝手に作りません。50,000行の既存テーブルにフィールドを追加しても、書き換えられる行はゼロです。
元に戻すはスナップショットロールバックではなく逆コマンドとして実装されており、特に約束1がそれを生き残るためです: セルを編集し、⌘Z を押し、保存 — git diff は空です。スナップショット復元の実装は、画面上では正しく見えても、触れたすべての行を静かに再シリアライズすることになります。

これを支えているのは: フィンガープリントチェックがOpenSheetの背後で行われた変更の上書きを拒否し、書き込みは一時ファイルと os.replace() を経由し、すべての保存でオープン時スナップショットと並んで .bak が保持されます。
機能
データはあなたが所有するファイル — プレーンな
.jsonlで、jq、DuckDB、pandas、Excel、gitで読み取り可能すべてを元に戻せる —
⌘Z/⇧⌘Z; バッチ削除は単一の元に戻すステップにまとまる13のフィールドタイプ — テキスト、数値、セレクト、マルチセレクト、日付、チェックボックス、URL、添付ファイル、数式、テーブル間ルックアップ、作成/更新時刻、自動番号。数値は保存された値を変更せずにプログレスバー、通貨、評価、パーセンテージとして表示可能
4つのビュータイプ — グリッド、カンバン、ギャラリー、さらにビューごとのフィルター、ソート、グループ化、統計、行の高さ、列の固定、列の順序
10,000行でもスムーズ — 仮想スクロール; 7.5 MBのテーブルの読み込み57 ms、保存59 msと測定
インポートとエクスポート — CSV、XLSX、JSON、SQLite、
.gristからのインポート; CSV、XLSX、JSON、JSONL、Markdown、Parquetへのエクスポート添付ファイルはローカルに留まる — ファイルは
<library>/assets/に置かれ、セルは相対パスを保持し、どこにもアップロードされない
エージェントのために作られ、AIで飾られていない
スプレッドシートにAIボタンを追加するのは機能です。エージェントがアダプターなしで読み書きできるストレージ形式を選ぶのはアーキテクチャです。OpenSheetは後者を行い、他のすべてはそこから導かれます: ファイルは行指向なので追記は >>、形式はテキストなので grep が機能し、ライターは単一なのでバイト忠実性が並行アクセスでも維持されます。
MCPサーバーはHTTPサーバーと同じプロセスで実行され、1つの Store インスタンスを共有します:
{
"mcpServers": {
"opensheet": {
"command": "python3",
"args": ["-m", "opensheet", "/path/to/libraries", "--mcp", "--mcp-root", "/path/to/libraries"],
"env": { "PYTHONPATH": "/path/to/opensheet/src" }
}
}
}ツール: list_libraries、list_tables、get_schema、query、upsert_rows。
upsert_rows はレシート — inserted / updated / unchanged のカウントと各プライマリキー — を返し、dry_run をサポートします。ディスク上にすでにあるものと同一の行は unchanged としてカウントされ、ファイルは触られません。
同じプロセスであることは実装の詳細ではありません。 バイト忠実性はプロセス内の状態に依存します: 各行がどのバイトとして到着したか。それぞれが独自のコピーを持つ2つのプロセスは、互いの書き込みを「変更」と結論し、次の保存でファイル全体を再シリアライズすることになります。2番目のプロセスはロックファイルを検出して最初のプロセスに転送するため、常に正確に1つのライターが存在します。
エージェントはOpenSheetをスキップしてファイルに直接追記することもできます。その際に忠実性を維持するルールは直接書き込みガイドに文書化されています。
アーキテクチャ
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/ にはフィールドタイプ、列幅、ビュー定義、テーブル間リンクが保持されます。これを削除するとフォーマットは失われますが、データは失われません — フィールドタイプは推論にフォールバックします。
なぜ小さく保たれるのか
バックエンドはPython標準ライブラリのみです。フロントエンドはプレーンなJavaScript — フレームワークもビルドステップもありません。macOSシェルはバンドルされたブラウザではなく、システムWebKit上の184 KBのSwiftです。
DuckDBはオプションで読み取り専用であり、SQLパネルとParquetエクスポートを提供します。フィルタリング、ソート、グループ化には決して参加せず、書き込みも決して行いません。すべての書き込みは store.py を経由します。
ネットワークなし、構造的に
テレメトリも、更新チェックも、CDNアセットも、オンラインデモもありません。ブラウザは同一オリジンの /api/* パスのみをリクエストし、サーバーはIPv4ループバックのみにバインドし、デスクトップシェルは独自のTCP接続をゼロ保持します。tests/test_offline.py がこれらすべてを強制します。
検証
bash tests/opensheet-全量验收-20260815.sh329テスト: JavaScriptユニット188、Python 83、ブラウザE2E 42(Playwright)、忠実性ラウンドトリップ8、ライブラリラウンドトリップ8。 忠実性テストはフィールド単位ではなくバイト単位でファイルを比較します — 値だけをチェックするテストは、約束1が静かに破られていても合格してしまうでしょう。
ブラウザテストには、PlaywrightのChromium用に web/ 内で npm install が必要です。
OpenSheetがやらないこと
コメント、権限、リアルタイムコラボレーション、自動化、ホスト型バージョン、オンラインデモ。 これらはそれぞれアカウントシステムか公開アドレスを必要とし、最初の設計制約であるデータがマシンから出ることはないという原則に矛盾します。
これは意図的な境界であり、ロードマップの欠落ではありません。
ステータス
動作しており毎日使用されていますが、試す前に知っておくべき2つの粗い部分があります:
UIは現在中国語のみです。 コード、コメント、インターフェース文字列はすべて中国語です。英語のローカライゼーションはまだ行われていません。
デスクトップシェルはmacOSのみです。 Web版はPythonが動作するどこでも動作します。
コントリビューション
IssueとPRは歓迎します。ストレージ層に触れる前に知っておくべきことが2つあります:
store.pyの行パススルーロジックこそが製品です。それを変更するということは、忠実性テストをグリーンに保つことを意味し、それらのテストはフィールドではなくバイトを比較します。コードコメントは現在中国語です。翻訳の助けは大歓迎です。
ライセンス
MIT — 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