MESSAGES / METADATA / MCP

Know when it made it.

Verify one attachment from local Messages metadata, without opening the conversation or reading what it contains.

Local only. Metadata only. Read only.

attachment proof synthetic record

LOCAL STATUS

READ

metadata
only
attachment
demo-attachment.pdf
sent at
2026-09-11 22:00 UTC
thread
Demo Contact
path
basename only
One filename in. One bounded answer out.

Install the repo, then verify the setup.

Clone the public source first. Run the standard-library checks before you connect the plugin to local Messages metadata.

Install

Clone the repository

git clone https://github.com/henryvn27/attachment-proof.git
cd attachment-proof

The clone includes the plugin manifest, MCP configuration, server, and tests.

Verify

Check the local setup

python3 -m unittest discover -s tests -v

Once it passes, open the cloned folder as a local Codex plugin. The manifest starts the dependency-free server.

Optional local probe

Use a fixture path when you need to inspect the service directly.

ATTACHMENT_PROOF_DB=/path/to/fixture.db python3 server.py --check

A send button is not a receipt.

Attachment Proof gives the handoff a stable answer, so a follow-up starts from evidence instead of a guess.

Replace “I think it sent” with the next useful check.

The tool looks for one exact basename in local Messages metadata, then stays honest about what that metadata can and cannot prove.

Read the boundary
  1. Send the fileMessages
  2. Ask for proofCodex
  3. Choose the next stepbounded status

Exact filename. Local query. Safer answer.

Three small moves keep the product useful inside the handoff that already exists.

  1. Ask

    Give Codex the exact filename, with an optional thread or time filter.

    verify_attachment
  2. Query

    Read Messages metadata in SQLite query-only mode. Never open the body or bytes.

    metadata_only: true
  3. Decide

    Use read, not-sent, not-found, or unknown to choose a truthful next check.

    status + interpretation

Proof gets smaller at the boundary.

The integration keeps the useful part and drops the parts that would turn a delivery check into a conversation reader.

INPUTOUTPUT
filename→basename
thread / time→bounded filters
Messages rows→status + timestamps
SQLite query-only. No write path.

Proof is useful when it changes what you do next.

Read the contract