TypeScript MCP SDK for Deside integrations.
This package implements the public Deside MCP contract as a reusable client:
- MCP session bootstrap
- OAuth 2.0 + PKCE with wallet proof
- tool calls
- refresh token handling
It is not a framework adapter. It is the protocol-facing base that adapters can consume.
v0 covers:
- MCP session bootstrap
- OAuth 2.0 + PKCE with wallet proof
- tool calls
- refresh token handling
- shared tool wrappers
Supported tool wrappers:
send_dmread_dmsmark_dm_readlist_conversationsget_user_infoget_my_identitysearch_agents
Validated against production on 2026-03-27:
connectgetMyIdentitylistConversationssendDm
The SDK authenticated with wallet proof and delivered a real DM through
https://mcp.deside.io/mcp.
The SDK is framework-agnostic and expects a signer with this shape:
type DesideSigner = {
getAddress(): string | Promise<string>;
signMessage(message: string): Promise<string | { signature: string }>;
};Notes:
getAddress()must return the authenticated Solana walletsignMessage()must sign the exact plaintext challenge message- the SDK normalizes signature encoding internally
import { DesideMcpSdk, type DesideSigner } from "@desideapp/mcp-sdk";
const signer: DesideSigner = {
getAddress: () => walletAddress,
signMessage: async (message) => signMessageSomehow(message),
};
const sdk = new DesideMcpSdk({
oauthRedirectUri: "https://agent.deside.io/callback",
});
await sdk.connect(signer);
const identity = await sdk.getMyIdentity(signer);
const conversations = await sdk.listConversations(signer, {});Important:
- input payloads intentionally match the MCP contract shape
- that means tool arguments use
snake_case, for exampleto_wallet,conv_id,before_seq - the SDK stays close to the public MCP contract
This package includes a standalone smoke harness:
examples/smoke.ts.env.template
Run:
npm install
npm run typecheck
npm run smokePublish:
npm publish --access publicRequired env vars:
SOLANA_PRIVATE_KEYDESIDE_OAUTH_REDIRECT_URI
Optional:
DESIDE_TO_WALLETDESIDE_TEXTDESIDE_MCP_BASE_URLDESIDE_OAUTH_SCOPEDESIDE_OAUTH_CLIENT_NAME
Production note:
- for production OAuth,
DESIDE_OAUTH_REDIRECT_URIshould behttps://...
@desideapp/mcp-sdk is the protocol-facing base.
Framework adapters may sit above it, but this package should not absorb framework-specific concerns.
- framework-specific plugin runtime
- UI or widget integration
- push runtime specific to a single framework
- normalized framework-facing adapters
While an adapter is under local development, it may temporarily depend on
@desideapp/mcp-sdk via link:.
Before any external publication or upstream PR, that adapter must switch to a
real semver dependency on @desideapp/mcp-sdk.
Do not turn this package into:
- a generic web SDK
- a widget package
- a framework adapter
- a product-level abstraction that drifts from the public MCP contract