Tissue now has an MCP server. Point Claude — or Cursor, Windsurf, or
any Model Context
Protocol client — at one URL and manage your whole account in plain language: deploy
Cells, query c3, read and write g7 objects, schedule pulses, and handle secrets, without
leaving the chat.
The endpoint is https://tissue.systems/mcp. Everything an agent can see and do
is bounded by the token you give it — least privilege, by construction.
// connect in one line
For Claude Code, that's the whole setup:
claude mcp add --transport http tissue https://tissue.systems/mcp
On first use it opens your browser, you sign in to Tissue once, and the tools light up — no
token to copy, no config file to hand-edit. Under the hood it's a standard OAuth flow with
automatic client registration; the same browser-login works in Claude Desktop, Claude.ai,
and Cursor. For CI and headless agents, create a scoped tok_… token instead and
pass it as a bearer header. Full setup for every client is in
the docs.
// what it can do
The server exposes one tool per operation, named <area>_<verb>, and
filters them by your token's scopes — a read-only token simply never sees the
write or delete tools.
Deploy a Cell called "hello" that returns "Hello, world!" for any request.
Create a c3 database "todos" with a tasks table (id, title, done, created_at),
then show me everything in it.
Show me the last 20 errors from my "payment-processor" Cell.
List my buckets and tell me the total size of the "uploads" bucket.
Claude calls the right tools, chains them, and reports back — deploying, querying, and
inspecting as it goes.
// binary & bulk, without flooding the chat
Object bytes don't belong in a model's context. For anything beyond small text, the server
mints a short-lived presigned URL and the bytes move out-of-band — straight
to storage, never through Claude:
You: upload ./logo.png to my "assets" bucket.
Claude → g7_presign_upload → returns a one-time PUT URL
→ curl -T logo.png "<url>" (bytes go directly to g7)
Because Tissue is the storage layer, the presigned URL is signed and verified by g7
itself — time-boxed, scoped to a single object and method, and tied to your bucket's
credentials. The agent gets a capability, not your keys.
// built for agents
Small choices add up to a server that's safe and legible for an LLM to drive:
Feature
Why it matters
Scoped tokens
Grant an agent databases:read and nothing else — enforced at the token, and read queries run on a read-only connection so writes are rejected by the engine.
Tool annotations
Every tool is tagged read-only / destructive / idempotent, so your client can ask before it deletes.
Structured output
Results come back as machine-readable JSON, not just text — the agent doesn't have to re-parse prose.
Docs search
search_tissue_docs lets the agent look up exact syntax instead of guessing.
Current protocol
Negotiates up to MCP 2025-11-25 and works with today's clients out of the box.
// get started
Add the server, sign in, and ask Claude to deploy something:
claude mcp add --transport http tissue https://tissue.systems/mcp
The full guide — browser login and token setup for Claude Code, Claude Desktop, Claude.ai,
and Cursor, plus the complete tool and scope reference — lives at
docs.tissue.systems/docs/mcp.
/Announcement
Coming soon: sensors on Tissue.
We're building tissue Sense — a way to point any sensor at Tissue and get
a live dashboard, stored history, and a full alerting pipeline — routed and escalated to
wherever it needs to go — without standing up a single server.
Tissue already gives you compute (Cells), SQL (c3), object storage (g7), and scheduling
(pulse). The piece missing for the physical world was a front door for devices and a way to
run close to them. That's what we're adding, and it's two new pieces with names that fit the
rest of the platform: synapse and ganglion.
// synapse — connect any device
synapse is the ingest layer. It speaks the protocols real hardware already
uses — MQTT, MQTT-over-WebSocket, CoAP over DTLS for battery devices, and plain HTTPS — and
turns every reading into an event your Cell handles in a new sensor(event, env)
handler, right alongside fetch and pulse. Each device gets its own
credential and can only write its own stream. The connections live outside your Cell, so your
code stays as simple as the rest of Tissue.
The practical upshot: a $5 microcontroller with a temperature sensor, a Tasmota plug you
already own, or a battery LoRa node in a field can all report to the same place — and a
browser can watch the numbers tick in real time.
// ganglion — tissue inside your network
ganglion is software you install on a Raspberry Pi (or any small Linux box)
that runs the same Cell as the cloud — right there in your building. It
bridges sensors that can't reach the internet on their own (LoRa, Zigbee, BLE, Modbus), and
it keeps working when the internet doesn't: ingest, dashboard, and alerts all run on-site,
and buffered readings sync up when the uplink returns.
Because the gateway runs the same Cell, your sensor data can be ingested, stored,
charted, and alerted on entirely inside your own walls — the cloud
becomes optional, for remote access, not a requirement to function.
// alerts — more than a notification
A reading crossing a line is just the trigger. Because the alert logic is your Cell, what
happens next is a pipeline you control: a rules engine watches for thresholds, sudden
swings, and the case that matters most — a sensor that has gone silent — then routes
the alert wherever it needs to go. Push it to a phone, text a teammate, email a list, fire a
webhook into Slack or PagerDuty, or escalate up an on-call rotation until someone
acknowledges. The notification on your phone is one delivery channel, not the whole system.
// who it's for
You are
What you get
A tinkerer
Flash a board in your browser, scan a code, see your sensor on a shareable page in minutes — free.
A small farmer
Greenhouse and cooler alerts that reach your phone, your family, or your staff — including when a sensor goes silent, the case that matters most.
An operator
Private dashboards, embeddable charts, and alerts that escalate. Public or private with one tap.
Industrial
A gateway you own, Modbus and LoRa on-site, and data that never leaves the building.
// why on Tissue
Most sensor platforms make you rent three black boxes — their ingest pipeline, their locked
dashboard widgets, their rules UI — none of which you can move. On Tissue, the Cell that
ingests the reading is the same Cell that renders the dashboard and runs the alert: one unit
you own, that you can fork, and that runs in our cloud or on a Pi in your greenhouse.
Dashboards are real web pages, so sharing and embedding them is native, not a paywalled tier.
// when
synapse and ganglion are in active development. We're opening early access soon — if you want
to be first to point a sensor at Tissue, sign up
and keep an eye on this blog. We'll post again the day it's live.
Tissue runs on Tissue.
We recently moved tissue.systems itself — the landing page, auth, dashboard, docs, and support — to run as Cells on Tissue. The platform now hosts its own front door.
This is the kind of milestone that either feels trivial ("of course it should run on itself") or reveals something important about where the platform actually is. For us it felt like the second one.
// what runs as a cell
Domain
What it does
tissue.systems
Landing page — static files served by a Files Cell
auth.tissue.systems
OAuth login, token issuance, /api/me — a JS Cell backed by c3 SQLite
dashboard.tissue.systems
Developer dashboard — JS Cell, reads the management API
docs.tissue.systems
Documentation — static files Cell
support.tissue.systems
Support — JS Cell
Each of these is deployed with a standard ribo deploy from a ribo.toml, the same as any user Cell. The custom domains point at the same routing layer as every other Cell, with TLS provisioned automatically.
// the one exception
The management API at api.tissue.systems is not a Cell. It is the process that deploys Cells — it cannot coherently run inside itself. It runs as a bare system process and is the only part of the platform that cannot eat its own cooking. Everything above that layer can.
// the bootstrapping problem
Moving to this setup raised an immediate question: auth.tissue.systems issues the JWT tokens that ribo login stores locally. Those tokens are required to deploy Cells. So the auth Cell must be running before you can deploy anything — including the auth Cell itself.
In practice the sequence is: stand up the management API first (bare metal), deploy auth with a temporary credential, then use the issued token to deploy everything else. The substrate has to exist before the things that run on it. This is not a deep paradox — it is just the order of operations — but it clarifies what "the substrate" actually is. The management API is the bedrock. Everything else, including our own product's front door, is a Cell.
// what this proves
Running on your own platform is the most honest test of it. The things we noticed immediately: cold-start latency matters when it is your own login page. c3 SQLite needs to be reliable when it is storing your own user sessions. Custom domain TLS provisioning needs to be invisible when it is your own domain at stake.
None of those turned out to be problems. That is the point of writing this down.
If you want to deploy a function and get a live URL, with SQL and storage and scheduling included, on infrastructure you control — sign up and run ribo deploy.