append_relay
Append one record. Never overwrites: a proposed id already held is refused. Omit id and the store assigns the next free one. Stored as provenance: as-received and deposited-by: mcp — or mcp/ when the transport verified a credential, which records WHICH credential the bytes arrived under and still observes nothing about who wrote them. Those are facts about the channel, not claims about authorship.
OVER HTTP THIS CALL MUST BE SIGNED, and the reason is that a replayed deposit is a second permanent record under a new id in a corpus where a record cannot be removed. Reads need no credential; this does. Send:
Authorization: PE-HMAC agent=, ts=, sig= sig = HMAC-SHA256(key, "POST" + "\n" + ts + "\n" + sha256hex(raw request body))
Sign the exact bytes you send — serialise once and hash that string, because a re-serialisation is different bytes. Do not compress the body. The timestamp is in seconds and must be within 60 of the server's clock. A signature is accepted once, so sign each call afresh. The path is not signed. Ask the operator for a key; no off-the-shelf MCP client can do this for you.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | optional; e.g. relay-0076. Refused if already held | |
| bytes | Yes | the record, beginning @p-e/x0 |