Typesheet for AI agents
Your agent writes. Typesheet checks every value first.
1Your agent writes
{
"tool": "upsert_records",
"arguments": {
"typesheet": "Sales leads",
"entries": [{
"values": {
"company": "Acme Freight",
"stage": "Closed",
"seats": "twelve"
}
}]
}
}2Typesheet rejects it
// Nothing was written.
[{
"index": 0,
"errors": [
{ "field": "stage",
"message":
"\"Closed\" isn't one of: Won, Lost" },
{ "field": "seats",
"message":
"\"twelve\" isn't a number" }
]
}]3It retries, and the item is saved
Acme Freight
- Stage
- Won
- Seats
- 12
- Next call
- Oct 4, 2026
Assistantjust now
Checked on our server
A wrong value is refused with the reason. One bad value saves nothing.
Marked as the agent's
Every change shows who made it, and a model's edits can be undone.
No keys to manage
One URL. Sign in once and it works in Claude, ChatGPT and Cursor.
With and without Typesheet
| Agent alone | Agent with Typesheet | |
|---|---|---|
| A wrong value | Saved anyway | Refused, with the reason |
| “It's done” | The model's word | Checked on the server |
| The same item twice | A duplicate | Updated in place |
| Who changed what | Unknown | Marked on every item |
| Keeping it current | Re-edit the whole file | One call per change |
You don't need it when
- The data is already clean and typed.
- It's a one-off you won't keep.
- Your own database already enforces the rules.
Questions
Any MCP client: Claude, ChatGPT, Cursor, Zed and more.
It can say so, but exports refuse while any value fails, so the claim can't get bad data out.
Every item shows who changed it last, and a model's edits can be undone one by one.
No. Direct writes only count toward the items your plan holds.