MCP server: One MCP server.

weave

@grunion-aiMCP server · External

Connected tables, relations, workflows and markdown documents in one SQLite file, over MCP.

Self-hosting & homelabv0.4.91MITJavaScript
Freeno charge per call

Runs on your machine from its package; the steps are below.

weave table view — a connected table with workflow state chips, milestones, and per-row documents
From the README · 1 of 5

What it does

  1. Reads
  2. Writes
  3. High impact

Not assessed yet.

What it costs

Free

Odel charges nothing per call. The publisher may charge for its own service.

Runs locally over stdio

This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).

Dockerghcr.io/grunion-ai/weave:0.4.91

Run

docker run -i --rm ghcr.io/grunion-ai/weave:0.4.91

MCP client config

{
  "mcpServers": {
    "weave": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "ghcr.io/grunion-ai/weave:0.4.91"
      ]
    }
  }
}
README15 min read

weave logo — two strands weaving into the mark

weave

An open-source, self-hosted alternative to Airtable, Fibery, Notion databases, and ClickUp — built so that AI agents are first-class users, not an afterthought.

Connected tables, relations, workflows, formulas, rollups, and per-entity markdown documents. One SQLite file. Zero dependencies. No build step. MIT.

License: MIT Node >= 22.16 Runtime dependencies: 0 Self-hosted MCP server included

For agents · Quickstart · Comparison · Agents & MCP · Self-hosting · FAQ

weave table view — a connected table with workflow state chips, milestones, and per-row documents


For agents

weave stores structured work (tables, rows, relations, documents) in one SQLite file, and an agent drives it over MCP, REST or the CLI.

  • Connect over MCP: node bin/weave.js mcp --data <file.db>, the same as weave mcp --data <file>. In Claude Code: claude mcp add weave -- node /path/to/weave/bin/weave.js mcp --data /path/to/workspace.db
  • Or build from a file: weave build <spec.json> --dry-run, then again without --dry-run.
  • Read AGENTS.md › Using weave first: the primer, every tool by job, plans with turn budgets, and common errors with their fixes.

What weave is

weave is a work platform you run yourself: spaces hold tables, tables hold entities, and entities connect to each other through real bidirectional relations — with lookups, rollups, formulas, workflow states, automations, and any number of markdown documents attached to each row.

It is meant to replace the SaaS your work already lives in — Airtable's bases and grids, ClickUp's tasks and boards, Fibery's connected databases with documents and automations — running on your laptop or your own server, with no per-seat bill and no vendor holding the export button.

The difference from every other tool in this category is the second audience. Work-management tools are built for humans first and APIs second. weave is built for humans and agents as equals: everything the web UI can do, the REST API, the CLI, and the built-in MCP server can do too — same engine, same data file on your disk. A local install needs no account and sends no telemetry. The hosted instance at https://weave.grunion.ai runs the same code behind a sign-in door.

  • Local-first — your workspace is one SQLite file next to your project.
  • Yours to host — one Node process and one file; run it on a laptop or a small VPS behind your own TLS and login (see Self-hosting).
  • Zero dependencies — git clone and run. Storage is Node's built-in node:sqlite; the only third-party code is vendored and pinned.
  • Agent-native — an MCP server any stdio client can mount (Claude Code, Codex CLI, Cursor, Gemini CLI), a scriptable CLI, Table#12 refs everywhere, and markdown documents addressable as plain URLs (/e/Task#12/doc.md, .html, .pdf).
  • Undoable — every entity mutation (edits, creates, deletes, links, comments) can be stepped back with weave undo, POST /api/undo, or the weave_undo MCP tool; agents get to make mistakes without making a mess.
  • Versioned documents — every document field keeps its revisions (one per editing session), browsable and restorable from the page, weave doc-revisions / weave doc-restore, or the weave_doc_revisions / weave_doc_restore MCP tools.

Quickstart

Requires Node ≥ 22.16 (Node 24 LTS recommended). There is nothing to build and nothing to install from npm.

bash
git clone https://github.com/grunion-ai/weave
cd weave
node bin/weave.js serve --port 4400 --data ./my-workspace.db

Or start it in a container from the same checkout:

bash
docker compose up -d

Open http://127.0.0.1:4400 — press ⌘K to search everything. A self-documenting weave docs workspace is provisioned alongside your data at /w/weave/: handbook, wiki, the public issue tracker and roadmap, and a Quality space mirroring the test suite.

If weave replaces a SaaS seat for you, star the repo. Stars are how the agent scouts and the directories find it.

Connect your agent

One config block, any stdio MCP client (Claude Code, Claude Desktop, Codex CLI, Cursor, Gemini CLI, Windsurf, OpenCode):

json
{ "mcpServers": { "weave": { "command": "node",
  "args": ["/path/to/weave/bin/weave.js", "mcp", "--data", "/path/to/my-workspace.db"] } } }

Or add it to Claude Code in one line:

bash
claude mcp add weave -- node /path/to/weave/bin/weave.js mcp --data /path/to/my-workspace.db

A hosted instance with a sign-in provider (Door C) is one line too. The first call opens the provider's sign-in in your browser; no token to paste:

bash
claude mcp add --scope user --transport http weave https://weave.example.com/mcp

/w/<name>/mcp serves another workspace. Your account has to be linked to your provider sign-in first (open the invite weave account link <name> prints, once, in a browser), and it needs the Architect role, since MCP carries the schema tools.

Seventeen tools by default, the ones a workspace build uses, weave_build among them, plus weave_call, which reaches the other forty-eight. weave mcp --tools all (or WEAVE_MCP_TOOLS=all) lists all 65. The same undo the UI has, and weave_vocabulary so an agent reads the allowed values instead of guessing. Full map: Agents: MCP, REST, and CLI.

Screenshots

Documents on every rowRelation mapUniversal search
weave entity page — a markdown document rendered beside the entity's fieldsweave relation map — tables connected by relations with the automation layer drawn inweave command-K search palette showing cross-workspace results with copyable permalinks
Every entity carries markdown documents, addressable as .md, .html, and .pdf URLs.The schema, drawn: relations with cardinality, plus the automation layer.⌘K across every workspace, backed by SQLite FTS5, with copyable permalinks.
weave table with one row opened in the dock beside it, the breadcrumb on one line above the table toolbar

Open any row and it docks beside its table, so the entity and the rows around it stay in view together.

How weave compares

Against the SaaS it replaces

weaveAirtableClickUpFibery
LicenseMIT, open sourceProprietaryProprietaryProprietary
Where the data livesA .db file you ownVendor cloudVendor cloudVendor cloud
PricingFree — it's a repoPer seat, per monthPer seat, per monthPer seat, per month
Row / record capsYour diskPlan-tieredPlan-tieredPlan-tiered
Agent accessMCP server + REST + CLI, all first-classAPI + partner integrationsAPI + partner integrationsAPI + partner integrations
Runs offlineYesNoNoNo
TelemetryNoneVendor-definedVendor-definedVendor-defined

Against other open-source Airtable alternatives

The open-source options in this space are all worth a look, and several are far more mature than weave. They differ mainly in what they optimize for:

ProjectLicenseInstall shapeOptimized for
weaveMITOne Node process, one file, no depsAgent access, connected documents, disappearing into a repo
NocoDBSustainable Use License (since v0.301.0)Docker + external DBPutting a smart-spreadsheet UI on an existing MySQL/Postgres
BaserowMIT (core; paid tiers separate)Docker Compose + PostgresA full Airtable-shaped product, cloud or self-hosted
GristApache-2.0Docker or NodeSpreadsheet-grade formulas and data analysis
TeableAGPL-3.0 (core)Docker + PostgresPostgres-native scale with an Airtable UI

Licenses and packaging as of August 2026 — check each project for current terms. Pick weave if you want connected tables plus markdown documents plus an MCP server, with no container, no database server, and no dependency tree. Pick one of the others if you need multi-user permissions, a hosted option, or a mature plugin ecosystem — see what weave is not.

What's inside

AreaDetails
Data modelSpaces → tables → entities. Field types: text, number, rating (icons you click to fill, 0 to a max), date, date range, checkbox, toggle (a switch with two named states), url, email, select, multiselect, workflow states, bidirectional relations, lookups, rollups (count, sum, avg, median, min, max, range, stdev, distinct, filled, empty, join — over a relation, or over a whole table from the space's own row, which is what the grid footer draws), formulas, and any number of markdown document fields per entity.
Statisticsweave stats <table> (also weave_stats and GET /api/tables/:ref/stats): every column summarised — five-number summary, stdev and a histogram for numbers, ranked distributions for chips, earliest/latest/span for dates — grouped with --by, narrowed with --where, cut to one column and its rollups with --field.
ViewsTable, entity pages (docked beside the table or opened full page), a relation map with the automation layer drawn in, and per-space/table filtering. Inline editing everywhere.
DocumentsEvery doc is a native URL: .md, .mmd, .html, .pdf. Mermaid diagrams, raw HTML and math render in place; [[Table#12]] mentions resolve to links. Whole-entity export paginates one page per document. Math is KaTeX only ($…$ / $$…$$, vendored + offline); the other fence engines Vditor knows (graphviz, echarts, plantuml, mindmap, abc, flowchart) are deliberately not vendored, so those fences stay plain code blocks.
AutomationsTriggers (created / field changed / state changed) → set field, append doc, add comment, outgoing webhook.
SearchUniversal ⌘K across workspaces with copyable permalinks, backed by a SQLite FTS5 index.
StorageOne workspace = one .db file (WAL, row-level writes, crash-safe). Legacy JSON workspaces migrate automatically; exportJSON/importJSON remain the human-readable interchange. CLI, server, and MCP can run concurrently.
InterfacesWeb UI (vanilla JS, no build step) · REST API · CLI (bin/weave.js) · MCP server (weave mcp).

Agents: MCP, REST, and CLI

Every interface drives the same engine and the same file. Nothing is UI-only.

MCP — point any MCP client at the stdio server. Claude Code, Claude Desktop, Codex CLI, Cursor, Gemini CLI, Windsurf and OpenCode all mount stdio servers, so one config block works in each of them:

json
{
  "mcpServers": {
    "weave": {
      "command": "node",
      "args": ["/path/to/weave/bin/weave.js", "mcp", "--data", "/path/to/my-workspace.db"]
    }
  }
}

It exposes the whole platform as 65 tools. tools/list names the core build set (weave_ontology, weave_schema, weave_query, weave_get_entity, weave_create_entity, weave_update_entity, weave_create_space, weave_create_table, weave_add_field, weave_update_field, weave_add_relation, weave_import_csv, weave_vocabulary, weave_workspace, weave_search, weave_build for spaces, tables, fields, relations and rows in one call) and weave_call, whose description lists every other tool (weave_set_doc, weave_link, weave_set_state, weave_update_table, weave_apply_schema, weave_views, weave_automations, weave_activity and the rest) in one line each; weave_call {name: "help", args: {tool}} returns a tool's full schema. Add --tools all to the mcp args, or set WEAVE_MCP_TOOLS=all, to list all 65 directly. An agent designs a schema, fills it, and configures how it reads — icons, option colors, column widths and order, hidden columns, saved views — without a human opening the UI.

Two things make that practical. weave_vocabulary returns every value a config key will accept and what the choice looks like on screen, so an agent picking a color or an icon is reading rather than guessing. And the meta-model means the schema is data: the rows of Workspace/Spaces, Workspace/Tables and Workspace/Fields are the spaces, tables and fields, so an entity write on a registry row runs the same validation as the schema verb — a field's whole shape edits through its Definition, a table's column order through Field Order. The registry lives once, at the weave root (the default workspace): a Workspaces table holds one row per workspace the hub serves, every registry row carries a Workspace relation, and a row edit routes to the workspace that owns it.

REST and CLI cover the same ground:

bash
# REST
curl -s localhost:4400/api/tables/Task/query -X POST -d '{"where":[["Status","=","Open"]]}'

# CLI
node bin/weave.js query Task --where '[["Status","=","Open"]]' --data ./my-workspace.db

# MCP (stdio)
node bin/weave.js mcp --data ./my-workspace.db

Entity refs accept UUIDs, #12, Table#12, or Space/Table#12 — in the UI, in the API, in documents, and in agent tool calls. See AGENTS.md for the full agent-facing map of the repo, including the one place the qualified form is not yet accepted.

Self-hosting

A hosted install is the local install plus a door. The container is the same on every target and the Handbook carries the guides (open Handbook → Guide on any instance, including the one you just started):

  • Self-host weave: choose your door: the two authentication surfaces (an edge gate, an identity provider) and the rule: the surface is the operator's choice. The built-in passkey door was removed after 0.4.52.
  • Door A: an edge gate: Cloudflare Access, Tailscale, Caddy, oauth2-proxy, Authelia: one config block and one check each.
  • Door C: sign in with a provider: one OpenID Connect provider (Clerk, Auth0, Keycloak, Authentik, Google). weave account link <name> mints a one-time invite link that opens an account to it; signing in creates none, and weave keeps one verified email per sign-in identity, nothing else. WEAVE_ORIGIN names the origin the provider sends people back to. Agents keep wv_ tokens.
  • Deploy: Railway: project from GitHub, volume at /data, variables, custom domain, one replica.
  • Deploy: Fly.io, Render, a VPS, Docker: one section each, same shape; the service unit lives here.
  • Backup and restore: weave backup (one sealed tar of every workspace, attachments and keystore), weave restore, the nightly switch, retention.
  • Environment reference: every variable, its default, and what breaks when it is wrong.

Quick start with Docker, using the Dockerfile and compose.yaml in the repo:

bash
docker compose up -d        # http://127.0.0.1:4400, data in the weave-data volume

railway.json and fly.toml are the platform manifests for the same image. Whatever the target, put a door in front and run weave workspace require-auth before the port is reachable from anywhere but your own machine. The threat model behind that rule is in SECURITY.md.

What weave is not

Stated plainly, so you can rule it out fast:

  • No fine-grained permissions. Each account holds one of three roles in a workspace: an observer reads and comments, an editor writes rows, an architect also changes structure, accounts and keys. Nothing narrows access to one space, row or field.
  • Auth is off until you turn it on. Agents carry wv_ tokens and people sign in through one OpenID Connect provider, but only after weave workspace require-auth. Until then, anyone who reaches the port can do everything an architect can.
  • Not a hosted product. There is no cloud tier, no signup, and no support contract. You run it.
  • Not a plugin ecosystem. No marketplace, no extensions, no third-party apps.
  • Not battle-tested at scale. It is a young project backed by a test suite, not by years of production mileage across thousands of installs.

If those are dealbreakers, Baserow, NocoDB, and Grist are the mature open-source options in this space.

FAQ

Is weave a good open-source Airtable alternative? If what you liked about Airtable was linked records, rollups, formulas, and views — yes, and you get markdown documents on every record plus an MCP server on top. If you relied on Airtable's collaborator permissions, hosted forms, or marketplace apps, no.

Is there a self-hosted Fibery alternative? That is the closest description of weave. Fibery's model — connected databases across spaces, documents attached to entities, automations, and a relation graph — is the model weave implements, in a single file you own. See docs/PARITY.md for the feature-by-feature matrix.

Can AI agents use it? That is the point. The MCP server exposes 65 tools covering schema design, CRUD, documents, relations, workflow states, search, automations, and CSV import/export, seventeen of them listed by default and the rest one weave_call away. Agents can build the schema, not just fill it in.

Do I need Docker, Postgres, or npm install? No, no, and no. One git clone and a Node runtime. Storage is Node's built-in node:sqlite; the only third-party code (mermaid, Tabler) is vendored and pinned in the repo.

Where does my data actually live? In <workspace>.db — a plain SQLite file — plus a files/ directory for attachments. Open it with sqlite3, back it up with cp, commit it if you like. node bin/weave.js export dumps the whole thing as readable JSON.

Can multiple people use one instance? Yes. Give each person an account at a role (observer, editor or architect), run weave workspace require-auth, and let them sign in through your OpenID Connect provider. Every change lands in the audit log under the name of the account that made it. Permissions stop at the workspace: no rule narrows access to one space, row or field.

How do I migrate off it? node bin/weave.js export --data <file> writes the entire workspace as JSON, csv dumps any table, and the .db is standard SQLite. There is no lock-in to escape.

Development

bash
npm test

The test suite is mirrored as entities in the docs workspace (Quality space), and the roadmap + issue tracker live there too (/w/weave/) — the tool tracks its own development. See CONTRIBUTING.md before opening a PR; README screenshots are regenerated with node scripts/screenshots.mjs.

Third-party (vendored, pinned)

  • mermaid 11.4.1 — MIT © Knut Sveidqvist & contributors
  • @tabler/core 1.4.0 — MIT © Paweł Kuna & The Tabler Authors
  • Vditor 3.11.3 (pruned: only the assets weave loads) — MIT © Vanessa219
  • KaTeX 0.18.11 (js + css + woff2 fonts + mhchem) — MIT © Khan Academy & contributors
  • DejaVu Sans 2.37 (DejaVuSans.ttf, PDF export Unicode fallback) — Bitstream Vera license © Bitstream, Inc.; DejaVu changes public domain; Arev glyphs © Tavmjong Bah (full text in public/vendor/fonts/DejaVuSans-LICENSE.txt)

Security

Authentication is off until an architect runs weave workspace require-auth on a workspace. Until then, anyone who reaches the port does everything an architect can in it. A local install binds 127.0.0.1, so it stays private to your machine. The container binds 0.0.0.0 for the platform's proxy, so before anyone else can reach a hosted install, put a door in front of it (see Self-hosting) and run require-auth. Every page and API route then refuses a caller without a wv_ token or a signed-in session.

Roles stop at the workspace. An observer reads and comments, an editor writes rows, and an architect changes structure, accounts and keys.

A document of kind html renders on the application's origin, so script an editor places in one runs for whoever opens it. We are reviewing that limitation. Until it changes, grant editor access the way you grant write access to a repository.

The threat model, the scope and private reporting are in SECURITY.md.

License

MIT — see LICENSE.

Similar modules

Browse Self-hosting & homelab