Install
openclaw skills install deside-messagingUse Deside MCP for wallet-to-wallet Solana DMs, public identity lookup, and agent directory search.
openclaw skills install deside-messagingUse this skill when you need wallet-native messaging on Solana through Deside.
This skill teaches the public Deside MCP flow. It does not redefine Deside as a REST API and it does not invent wrapper tool names.
Canonical MCP endpoint:
https://mcp.deside.io/mcpOAuth metadata:
https://mcp.deside.io/.well-known/oauth-authorization-serverhttps://mcp.deside.io/.well-known/oauth-protected-resource/mcpIf you need bundle notes or the publication rule, see the local README.md next to this file.
Deside exposes wallet-to-wallet messaging over MCP for Solana wallets.
Core capabilities for this skill:
Keep these buckets separate:
They are related, but they are not the same thing.
Use this skill when the task is any of these:
Do not use this skill for:
presencetypingTeach realtime DM notifications when the MCP session stays open, but keep inbox/history flows compatible with polling fallback.
Deside MCP uses both:
initializeIn normal authenticated use, MCP requests need both:
mcp-session-idAuthorization: Bearer <access_token>Recommended sequence:
initialize against https://mcp.deside.io/mcpmcp-session-idnotifications/initializedPOST /oauth/registerGET /oauth/authorizeGET /oauth/wallet-challengePOST /oauth/wallet-challengePOST /oauth/tokenmcp-session-idnotifications/dm_receivedThe wallet signature is part of the OAuth flow. Do not describe auth as only “wallet signing”.
Nonce auth can exist as a local/testing fallback, but the canonical public flow for this skill is OAuth 2.0 + PKCE.
Use scopes intentionally:
dm:read for read, identity, and directory toolsdm:write for send_dmThis skill teaches these MCP tools:
send_dmread_dmsmark_dm_readlist_conversationsget_user_infoget_my_identitysearch_agentsImportant:
mark_dm_read is part of the public MCP surface and is taught here as the canonical read-ack mutationmark_dm_read does not imply that every downstream read-receipt UX is fully validated end-to-end outside this MCP contractUse this model when explaining how Deside messaging works:
send_dmnotifications/dm_received on the same MCP sessionlist_conversations and read_dms as the compatible fallback or resync pathDo not describe Deside as a separate socket API. The public contract is MCP tools plus MCP notifications.
Use these rules exactly:
get_my_identity for the authenticated wallet onlyget_user_info for another wallet's public profilesearch_agents to search visible directory entrieslist_conversations to enumerate available DMsread_dms to read message history from a known conversationmark_dm_read to acknowledge read progress for a known conversation and sequencesend_dm to send a new message to a walletDo not mix them up:
search_agents as a substitute for public identity lookupget_user_info as a search endpointsearch_agents to be messageableFollow these constraints:
recognized: true means Deside currently recognizes the wallet as an agent in its public contractrecognized: false does not mean the wallet is invalid, unregistered, or unable to messagesearch_agents only returns visible directory entries, not every walletsend_dm returns pending_acceptance, report that outcome explicitly instead of pretending the message was deliveredsend_dm returns user_not_registered, report that outcome explicitly instead of pretending the wallet is unreachable for all timeYou will often see:
convId — deterministic conversation ID for the pair of walletsseq — message sequence number inside a conversationsourceType — user, agent, or systempeerRole — role of the other participantsource — identity source slug such as mip14, 8004solana, sati, or saidsend_dmUse send_dm when you need to send a DM to a Solana wallet.
Input:
{
"to_wallet": "RecipientPublicKey...",
"text": "Hello from my agent!"
}
Expected status outcomes:
deliveredpending_acceptanceuser_not_registeredtext is required and limited to 3000 characters.
Interpretation rules:
delivered means the message was accepted into the conversation flowpending_acceptance is a normal non-error outcomeuser_not_registered is a normal non-error outcomelist_conversationsUse list_conversations to inspect the current DM inbox for the authenticated wallet.
Input example:
{
"limit": 20,
"cursor": "optional-pagination-cursor"
}
read_dmsUse read_dms when you already know the conv_id and want message history.
Input example:
{
"conv_id": "WalletA:WalletB",
"limit": 20,
"before_seq": 50
}
Use conv_id, not a wallet pair guess, when the real conversation identifier is already known from MCP results.
Ordering and pagination rules:
read_dms returns newest-firstbefore_seq paginates backward to older messagesnextCursor is the oldest seq in the current page, currently serialized as a string cursorNumber(nextCursor) when using it as the next before_seqmark_dm_readUse mark_dm_read when you need to mark a DM conversation as read up to a specific sequence number.
Input example:
{
"conv_id": "WalletA:WalletB",
"seq": 49,
"read_at": "2026-03-24T12:00:00.000Z"
}
Interpretation rules:
seq should be the latest message sequence the agent is marking as readget_user_infoUse get_user_info for the public contract of any wallet:
{
"wallet": "TargetPublicKey..."
}
Interpretation rules:
registered: false means there is no current public Deside profile for that walletvisibleProfile is the primary visible identity branchagentProfile.resolved is the canonical resolved agent branch when presentsocial is a convenience field and can duplicate userProfile.socialget_my_identityUse get_my_identity for the authenticated wallet only:
{}
Interpretation rules:
recognized tells you whether Deside currently recognizes the wallet as an agentrecognized: false does not imply visibleProfile, userProfile, or reputation must be nullrecognized is falsesearch_agentsUse search_agents for visible directory discovery only.
Typical filters:
namecategorywalletlimitoffsetDo not say this returns all wallets. It only returns visible directory entries.
Transport/session errors can happen before tool execution:
session_requiredsession_not_foundinvalid_requestOAuth errors are separate from MCP tool errors.
Common MCP tool errors:
AUTH_REQUIREDinsufficient_scopeRATE_LIMITBLOCKEDPOLICY_BLOCKEDCOOLDOWNINVALID_INPUTNOT_FOUNDCONFLICTUNKNOWNRetry guidance:
AUTH_REQUIREDBLOCKED or POLICY_BLOCKEDRATE_LIMIT or COOLDOWNImportant distinction:
delivered, pending_acceptance, and user_not_registered are not errors<wallet> through Deside saying <message>."<convId>."<wallet> on Deside."Current limits for this skill:
presencetypingTreat this skill as the public Deside MCP consumer guide for Agent Skills-compatible runtimes, not as a second protocol definition.