Skip to content

Integrate Magpie — x402-native permissionless lending (borrow / arm in-vault exit / repay) into plugin-defi #593

Description

@magpiecapital

Summary

Proposal to add Magpie — an x402-native permissionless lending protocol on Solana — as a plugin-defi integration, so agents built on Solana Agent Kit can borrow SOL against their own collateral, arm in-vault take-profit / stop-loss exits, and repay, all signing locally.

Magpie is already x402-native and ships a typed SDK (@magpieloans/magpie-agent) and an MCP server (@magpieloans/magpie-mcp), so the SAK integration is a thin action wrapper over the SDK in the same shape as the existing Lulo / Drift / Lavarage integrations under packages/plugin-defi/src/.

What Magpie is (verified facts only)

  • x402-native permissionless agent lending on Solana (HTTP 402 pay-per-call). No signup, no API key. Zero custody — the service holds no keys; the agent signs unsigned transactions locally with its own keypair.
  • An agent borrows SOL against its own collateral — memecoins (V1 program) or tokenized-stock / RWA (V3 program, launching) — then optionally arms self-owned in-vault TP/SL exit orders (V4 program: proceeds accumulate inside the loan's vault, the loan stays Active, and the only path back to the wallet is a borrower-signed repay). 170+ approved collateral tokens.
  • Live x402 catalog: https://x402.magpie.capital/.well-known/x402.json. Site: https://x402.magpie.capital. Repo: https://github.com/magpiecapital/magpie-x402 (SDK at sdk/, MCP at mcp/).

Proposed action surface (plugin-defi/src/magpie/)

Mapped 1:1 onto the existing @magpieloans/magpie-agent SDK methods (all sign locally with the agent's keypair):

SAK action SDK method x402 cost Behavior
MAGPIE_BORROW agent.borrow({ collateralMint, collateralAmount, tier, hasExitArming }) 0.005 SOL Build + cosign + submit a borrow; hasExitArming: true routes to V4 so exits can be armed
MAGPIE_ARM_EXIT agent.armExit({ loanId, direction, target | priceUsd | mcUsd | trailingBps, slippageBps, dest }) 0.001 SOL Arm an in-vault TP (above) / SL (below) on the agent's own V4 loan
MAGPIE_LIST_EXITS agent.listExits() free List the wallet's armed exit orders
MAGPIE_REPAY agent.repay({ loanPda }) 0.002 SOL Borrower-signed repay; releases collateral + any in-vault SOL proceeds
MAGPIE_POOL_STATE agent.pools() / agent.poolState() free Live on-chain LendingPool state across V1/V3/V4
MAGPIE_SIMULATE_BORROW agent.simulateBorrow({...}) free Quote borrowable SOL before committing
MAGPIE_WALLET_LOANS agent.walletLoans(wallet) free All loans a wallet holds across versions

(Read actions — pool state, simulate-borrow, wallet loans — are free; borrow/armExit/repay carry the small x402 per-call fee shown.)

One open integration question (the reason this is an issue, not yet a PR)

SAK's BaseWallet (packages/core/src/types/wallet.ts) is a signing-surface-only abstraction — it exposes publicKey, signTransaction, signAllTransactions, signAndSendTransaction, signMessage, and intentionally no raw Keypair / secret key (so it works with Privy / Turnkey / embedded wallets).

The current @magpieloans/magpie-agent v0.1.4 constructor takes a Keypair directly (new MagpieAgent({ keypair })) and signs its x402 payment transfers and Ed25519 exit-order envelopes internally. So a clean in-tree wrapper needs one of:

  1. (Preferred) A BaseWallet-compatible constructor in the Magpie SDK — accept an external signer (signTransaction + signMessage) instead of a raw Keypair. We (Magpie) are happy to ship this so the SAK action never touches a private key and stays compatible with embedded/MPC wallets. This keeps SAK's custody model intact.
  2. Or, scope the first cut to keypair-backed wallets only (extract the Keypair from a KeypairWallet), which we'd rather avoid because it breaks for non-keypair wallets.

We'd like maintainer guidance on the preferred path before opening a PR, so the integration matches SAK's wallet abstraction cleanly rather than reaching around it. Option 1 is our default and we can have the SDK change ready quickly; then the plugin-defi/src/magpie/ action+tools PR follows the exact Lulo/Lavarage file layout (actions/*.ts Action objects + tools/*.ts + registration in plugin-defi/src/index.ts).

Happy to implement the full PR — just confirming the wallet-bridge approach you'd prefer so it's right the first time.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions