ekx-xmtplisted
Install: claude install-skill Ekinoxis-evm/claude-skills
# XMTP
Wallet-to-wallet messaging, via the **`xmtp-docs` MCP server**.
Status: **evaluated, not shipped.** No XMTP package appears in any `package.json`.
This file exists so the next person does not re-derive the evaluation.
Docs: https://docs.xmtp.org
---
## What it is
End-to-end encrypted messaging addressed by wallet address rather than by account.
Messages are portable across any XMTP client, and the identity is the wallet — no
signup, no server holding the thread.
---
## Where it fits us
**Good fit:** notifying a bidder that they were outbid, or a player that a challenge
resolved — addressed to a wallet, delivered to whatever client they use, no email or
phone number collected.
**Bad fit:** the in-app chat itself. A `conversations.list()` on load, encrypted local
state, and a signature prompt to initialise are all worse UX than a Supabase table
with realtime for users who are already authenticated with Privy.
**The decision:** Supabase realtime for in-app chat; XMTP remains
the right answer for *outbound wallet-addressed notification* if that becomes a
requirement.
---
## Sketch
```ts
import { Client } from "@xmtp/browser-sdk";
const client = await Client.create(signer, { env: "production" });
const dm = await client.conversations.newDm(recipientAddress);
await dm.send("Tu puja fue superada.");
for await (const message of await client.conversations.streamAllMessages()) {
if (message.senderInboxId === client.inboxId) continue; // skip your own
rende