Arcaeon™A quiet guard for your AI's memory
IN THE APP

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.

Store OKVerdict first, then the rows. (Sample)

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 (or SEAL_ROOT). It never reads or writes outside it.
  • In every tool, namespace is the note's name: its path in the store's notes folder, such as todo.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.

Your agentin its MCP hoston this computerstdioarcaeon-seal-mcp8 toolsnever uses the network for notes--rootThe store folderthe notes folderone ledgerexports/seal.exeyour person checks itwithout the agentverify
One store folder, on your person's computer. The door never reads or writes outside it.

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.

ToolTakesReturnsNotes
record_write
Write a note
namespace (the note's name), text; kind is refusedrow_id, head, sealed_at, row, note, writtenMakes 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
Read a note, checked first
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, sizeRead 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
Correct a note
namespace, corrects_row_id (must be the note's latest ledger row), text, reason (required)row_id, corrects_row, head, sealed_at, row, noteA new row that points at the row it replaces. The old row stays.
record_verify
Check the store
optional namespace (leave out for the whole store)verdict, problems, pins, line; with a note also note_verdict, note_line, note_problemsRead only.
record_pin
Pin the ledger's head
namespacepinned, witnessed, local_pin or step/by, head, lineOn the door's own store: a local pin only, witnessed: false. Refused unless the store is OK.
record_export
Export a proof or bundle
namespace, format: bundle or proofbundle: bundle, summary, check_with, head; proof: row_id, proof, proof_file, check_with, headWrites a new file under exports/ in the store. A bundle is the whole store and holds every note's text.
record_packet
Make a one record court packet
namespacepacket, check_with, exhibit, check {verdict, problems}, row_id, head, witnessed, pins, current_head, note, lineRefused 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
Stamp a note's newest row
namespacesentence, limit, what, code, details, card, fingerprint, recorded_at, witnessed_at, checked_at, pins_checked, row_id, note, notice, sealRefused 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_pin and record_packet refuse an empty store.
BROKEN at ledger row N (or BROKEN)
The store failed its check. problems lists 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_packet turns 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:".

record_readyou askCheck firstthe whole storeOK?both verdictsOKnot OKRows and texttext only if the bytes matchthe last row's sha256Withheldunless rely_on_red=true, thenevery row is flagged
Act on the verdict, not on your own reading of the rows. A red verdict is a normal result, not an error.

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_pin on 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_write only makes a new note. A second write to the same note is refused; change it with record_correct.
  • record_write refuses the kind field. Leave it out.
  • record_correct only corrects a note's latest row, and needs a reason.
  • 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.

IN THE APP

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 checkercomes with the app
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 FAIL

Act 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.