in the desktop app (in an earlier release)
For agents
The MCP door: notes in a sealed store your person owns.
If you are an agent, this page is written for you. The door is a local program that lets you keep notes in a sealed store on your person's computer. Every write is sealed when it is written. Every read starts with a check. Your person can read the same store and check it without you.
The facts
What it is, in five lines.
- One local MCP server,
arcaeon-seal-mcp, over stdio, in the desktop app (in an earlier release). - Exactly eight tools:
record_write,record_read,record_correct,record_verify,record_pin,record_export,record_packet,record_stamp. - It speaks for one store folder, named with
--root(orSEAL_ROOT). It never reads or writes outside it. - In every tool,
namespaceis the note's name: its path in the store's notes folder, such astodo.txt. It is not the store's own namespace. - Every row number is a ledger row: its place in the store's one ledger, counting from 0, not a count within one note.
A client that has the folder can still read a flagged note off the disk; the door flags it and holds the text back, it cannot stop a client that goes around it.
Connect over stdio
One entry in your host's MCP config.
The desktop app installs the door (in an earlier release) and the seal checker in the app folder, and makes the store folder:
- Door:
C:\Users\YOU\AppData\Local\Programs\Arcaeon\arcaeon-seal-mcp.exe - Seal checker:
C:\Users\YOU\AppData\Local\Programs\Arcaeon\seal.exe - Store:
C:\Users\YOU\AppData\Local\ArcaeonDoor\store(kept apart from the app's own folder; uninstall keeps it)
Add this inside mcpServers. Full paths, every backslash written twice:
{
"mcpServers": {
"arcaeon-seal-mcp": {
"command": "C:\\Users\\YOU\\AppData\\Local\\Programs\\Arcaeon\\arcaeon-seal-mcp.exe",
"args": ["--root", "C:\\Users\\YOU\\AppData\\Local\\ArcaeonDoor\\store"]
}
}
}
Restart the host fully. Listing the tools from arcaeon-seal-mcp should show eight. The store
folder must already exist: the door never makes one, and will not start without it.
A quick check that it starts: arcaeon-seal-mcp.exe --help prints a usage line with --root ROOT.
The eight tools
What each takes, and what it returns.
Every result comes twice: as structuredContent following the tool's published output schema, and as the same JSON in a text block.
| Tool | Takes | Returns | Notes |
|---|---|---|---|
record_write | namespace (the note's name), text; kind is refused | row_id, head, sealed_at, row, note, written | Makes a new note only: a note that already has a row is refused, with the same text or any other, and nothing is written. Change it with record_correct and a reason. Not idempotent. |
record_read | namespace; optional query, since (a row number), rely_on_red (default false) | verdict first, then note_verdict, note_line, problems, note_problems, pins, rows, text, text_withheld, matches_last_row, text_sha256, sealed_sha256, size | Read only. Text only when both verdicts are OK and the bytes match the last row's full sha256. Over 262144 bytes: no text, with size. |
record_correct | namespace, corrects_row_id (must be the note's latest ledger row), text, reason (required) | row_id, corrects_row, head, sealed_at, row, note | A new row that points at the row it replaces. The old row stays. |
record_verify | optional namespace (leave out for the whole store) | verdict, problems, pins, line; with a note also note_verdict, note_line, note_problems | Read only. |
record_pin | namespace | pinned, witnessed, local_pin or step/by, head, line | On the door's own store: a local pin only, witnessed: false. Refused unless the store is OK. |
record_export | namespace, format: bundle or proof | bundle: bundle, summary, check_with, head; proof: row_id, proof, proof_file, check_with, head | Writes a new file under exports/ in the store. A bundle is the whole store and holds every note's text. |
record_packet | namespace | packet, check_with, exhibit, check {verdict, problems}, row_id, head, witnessed, pins, current_head, note, line | Refused unless the store is OK. check.verdict is OK, UNVERIFIED or FAIL; a FAIL is a refusal. witnessed is always false from the door. |
record_stamp | namespace | sentence, limit, what, code, details, card, fingerprint, recorded_at, witnessed_at, checked_at, pins_checked, row_id, note, notice, seal | Refused unless the store is OK. Writes nothing. One plain sentence and a one page card, a record, not a ruling; show them as returned. witnessed_at is null from the door. |
Read the verdict, not the rows
The verdict words.
- OK
- The store (or the packet) passed every check.
- EMPTY
- The store has no rows yet. Nothing is vouched for.
record_pinandrecord_packetrefuse an empty store. - BROKEN at ledger row N (or BROKEN)
- The store failed its check.
problemslists each as {code, row, text}. The verdict covers the whole store, so a read of any note is red while one note is broken. - STALE_PIN
- The store passed on its own but does not agree with its pins.
- UNVERIFIED
- From a packet check: a step the packet cannot check alone. Never a pass. A packet names a witness time only when it is tied directly to the point the witness signed; any other packet is UNVERIFIED for the time and names none.
- FAIL
- From a packet check: a hash does not hold.
record_packetturns a FAIL into a refusal, never a success.
Red first. record_read verifies before it answers. When the verdict is not OK, rows and text are withheld unless you pass rely_on_red=true, and then every row is flagged and text comes with text_flagged: true. Do not repair a red store, and do not ask your person to let you. Tell them.
Refusals. A result with "refused": true (and reason) means nothing was done. It is sent with isError: true. A red verdict is a normal result, not an error. Refusals that need a person start with "This needs a person at this computer:".
What the door never does
Hard lines.
- Never uses the network for notes. Notes stay in the store folder on this computer.
- Never reads or writes outside its one store. Links, device names, drive letters, absolute paths and
..in a note name are refused. - Never deletes or rewrites. Write and correct only add rows; pin, export and packet only add files.
- Never fakes success. When it cannot do what was asked, it refuses.
- Never claims a note is true, or who wrote it. The seal proves rows were not altered after writing.
- Never claims a witness on this store:
record_pinon the door's own store makes a local pin, and nobody outside this computer saw it.
Tool hints: read and verify are read only. Only record_pin is marked open world, because on a folder the desktop app keeps, the app's own Pin now may reach its witness with a fingerprint. The door's own store is not such a folder.
Known limits
Plan around these.
record_writeonly makes a new note. A second write to the same note is refused; change it withrecord_correct.record_writerefuses thekindfield. Leave it out.record_correctonly corrects a note's latest row, and needs areason.- No witness on the door's store, so it cannot prove nobody wiped or rewound the whole store.
- A bundle export holds every note's text. Share it only with someone who may read the notes.
What it costs an agent
The door and every check are free.
Writing, reading and checking a store on your person's computer needs no key and costs nothing. Pins on the hosted witness at witness.arcaeon.io: 10 a month per key free, packs of 200 pins for $5 or 1,000 pins for $20, and membership at $9 a month or $99 a year, unlimited pins, up to 100 an hour (not on sale yet). Anyone can buy, including an agent paying its own way. Pricing.
In this release
What ships in 0.1.5.
Shipped
- The desktop app: watches one memory folder. Green, red, amber (never a pass) and grey. It reports changes; it does not undo them.
- The five-step first-run tour, with the practice file that turns red and back to green.
- The seal checker,
seal.exe, beside the app. No Python. - This MCP door,
arcaeon-seal-mcp: eight tools over stdio, in an earlier release. - The one-record court packet. Without a witness pin it shows the note matches this computer's own record; with a pin, that the record was not changed after the pin. Never proves the facts are true. Not legal advice.
- On this site, not in the app: stamping a file (/stamp) and the browser checker (/verify-record).
- Hardening (in an earlier release): planted instruction files are refused at setup; weak witness keys, unreadable rows and unsafe zips are named red states.
- There is no Linux download of this release. The build is not code-signed, so your computer may warn you before it runs.
Check without the door
Your person can check the same store without you.
seal.exe --root "STORE" verify
seal.exe verify-bundle "BUNDLE.zip" last line: OK 0 problems
seal.exe verify-proof "PACKET.zip" OK, UNVERIFIED or FAILAct on the verdict, not on your own reading of the rows. Do not repair a red store; tell your person. Check it yourself.
Machine-readable version of this page, for agents: llms.txt.