← ClaudeAtlas

ekx-xmtplisted

Wallet-to-wallet messaging with XMTP, evaluated but not shipped — client creation from a signer, conversations and streams, consent, and what it is and is not suited for. Use when building in-app chat between wallet addresses, wallet-addressed notifications, or evaluating XMTP against a normal database-backed chat.
Ekinoxis-evm/claude-skills · ★ 0 · AI & Automation · score 60
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