Skip to content

DesideApp/mcp-sdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@desideapp/mcp-sdk

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.

What It Covers Today

v0 covers:

  • MCP session bootstrap
  • OAuth 2.0 + PKCE with wallet proof
  • tool calls
  • refresh token handling
  • shared tool wrappers

Supported tool wrappers:

  • send_dm
  • read_dms
  • mark_dm_read
  • list_conversations
  • get_user_info
  • get_my_identity
  • search_agents

Validated Today

Validated against production on 2026-03-27:

  • connect
  • getMyIdentity
  • listConversations
  • sendDm

The SDK authenticated with wallet proof and delivered a real DM through https://mcp.deside.io/mcp.

Signer Contract

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 wallet
  • signMessage() must sign the exact plaintext challenge message
  • the SDK normalizes signature encoding internally

Minimal Usage

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 example to_wallet, conv_id, before_seq
  • the SDK stays close to the public MCP contract

Smoke

This package includes a standalone smoke harness:

  • examples/smoke.ts
  • .env.template

Run:

npm install
npm run typecheck
npm run smoke

Publish:

npm publish --access public

Required env vars:

  • SOLANA_PRIVATE_KEY
  • DESIDE_OAUTH_REDIRECT_URI

Optional:

  • DESIDE_TO_WALLET
  • DESIDE_TEXT
  • DESIDE_MCP_BASE_URL
  • DESIDE_OAUTH_SCOPE
  • DESIDE_OAUTH_CLIENT_NAME

Production note:

  • for production OAuth, DESIDE_OAUTH_REDIRECT_URI should be https://...

Package Boundary

@desideapp/mcp-sdk is the protocol-facing base.

Framework adapters may sit above it, but this package should not absorb framework-specific concerns.

What It Does Not Cover

  • framework-specific plugin runtime
  • UI or widget integration
  • push runtime specific to a single framework
  • normalized framework-facing adapters

Adapter Publication Note

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.

Scope Discipline

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

About

TypeScript MCP SDK for Deside integrations.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors