mcp-server-usdd
Enables management of USDD protocol vaults, PSM swaps, savings, and token transfers across TRON, Ethereum, and BSC, plus protocol analytics and treasury insights.
README
mcp-server-usdd
An MCP server for the USDD protocol across TRON, Ethereum, and BNB Smart Chain (plus internal testnets). Covers Vault/CDP, PSM, USDD Savings, token transfers, and protocol analytics.
Scope
Current implementation covers:
- Vault lifecycle: open, deposit collateral, mint USDD, repay, withdraw, close
- PSM lifecycle: inspect fees and routes, swap into USDD, swap out of USDD
- Savings lifecycle: inspect USDD Savings, deposit, withdraw
- Risk and monitoring for vaults: summaries, oracle status, collateral buffers
- Token preflight checks: balances, allowances, approvals
- Token transfers: two-step preview → confirm flow for TRX, TRC20, and EVM native/ERC20
- Protocol analytics: chain metrics, collateral prices, PSM route metrics, treasury, Smart Allocator, proof of reserve
Supported Networks
| Network | Key | Notes |
|---|---|---|
| TRON | tron |
TRON-native vault and PSM support |
| Ethereum | eth |
Vault, PSM, USDD Savings |
| BNB Smart Chain | bsc |
Mirrors ETH deployment structure |
| TRON Nile | tron_nile |
Internal testnet deployment |
| Ethereum Sepolia | eth_sepolia |
Internal testnet deployment |
| BSC Testnet | bsc_testnet |
Internal testnet deployment |
Prerequisites
- Node.js 20+
- Optional but recommended:
TRONGRID_API_KEYfor more reliable TRON access- dedicated
ETH_RPC_URL - dedicated
BSC_RPC_URL
Developer
Installation
git clone https://github.com/decentralized-usd/mcp-server-usdd
cd mcp-server-usdd
npm install
Usage
npm start
npm run start:http
npm run dev
Configuration
Wallet Modes
The server supports two signing modes:
- Browser mode (recommended): connect a TronLink-compatible browser wallet and sign in browser.
- Agent mode: use encrypted local private keys stored in
~/.agent-wallet/.
For TRON writes, each Claude session shows a one-time signing-mode confirmation reminder before the first write.
You can also manage wallets via CLI or MCP tools:
CLI (agent-wallet)
The server uses @bankofai/agent-wallet for encrypted local wallet storage. On first startup it will automatically initialize ~/.agent-wallet/ and create a default wallet if none exists.
# Import an existing private key or mnemonic
npx agent-wallet add
# Generate a new wallet
npx agent-wallet generate
# List all wallets
npx agent-wallet list
# Switch active wallet
npx agent-wallet activate <wallet-id>
MCP Tools (runtime)
| Tool | Description |
|---|---|
get_wallet_address |
Shows current address |
connect_browser_wallet |
Connect TronLink / browser wallet for signing |
set_wallet_mode |
Switch between browser and agent signing |
get_wallet_mode |
Show current signing mode and addresses |
list_wallets |
List wallets with per-family active status (tron and evm) |
set_active_wallet |
Switch active wallet by ID, optionally scoped by walletType (tron/evm) |
Client Configuration
Claude Desktop
Add the following config to:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"mcp-server-usdd": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@usdd/mcp-server-usdd"],
"env": {
"TRONGRID_API_KEY": "your_trongrid_api_key"
}
}
}
}
Claude Code
Create .mcp.json in the project root directory:
{
"mcpServers": {
"mcp-server-usdd": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@usdd/mcp-server-usdd"],
"env": {
"TRONGRID_API_KEY": "your_trongrid_api_key"
}
}
}
}
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"mcp-server-usdd": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@usdd/mcp-server-usdd"],
"env": {
"TRONGRID_API_KEY": "your_trongrid_api_key"
}
}
}
}
Tools
Wallet & Network
| Tool | Description | Write? |
|---|---|---|
get_supported_networks |
List supported networks | No |
set_network |
Set default network for one family (tron/eth/bsc), supports aliases like mainnet, nile |
Yes |
get_network |
Get per-family default networks | No |
get_wallet_mode |
Get active wallet signing mode (agent/browser) |
No |
set_wallet_mode |
Switch active signing mode | Yes |
connect_browser_wallet |
Connect a browser wallet and activate browser mode | Yes |
get_wallet_address |
Show current address for the target network | No |
list_wallets |
List wallets and per-family active pointers (tron/evm) |
No |
set_active_wallet |
Switch active wallet by ID (supports optional walletType) |
Yes |
import_wallet |
Import private key/mnemonic into encrypted local store | Yes |
Common
| Tool | Description | Write? |
|---|---|---|
get_protocol_overview |
Show configured protocol addresses, ilks, PSMs, and ceilings | No |
get_supported_ilks |
List configured collateral types and PSM joins | No |
get_native_balance |
Read native balance (TRX / ETH / BNB) |
No |
get_token_balance |
Read ERC20/TRC20 balance | No |
check_allowance |
Read ERC20/TRC20 allowance and compare against an optional amount | No |
approve_token |
Approve token allowance | Yes |
Vault
| Tool | Description | Write? |
|---|---|---|
get_oracle_status |
Inspect oracle and liquidation configuration for an ilk | No |
get_user_vaults |
List vault IDs for a wallet | No |
get_vault_summary |
Show collateral, debt, and liquidation metrics | No |
analyze_vault_risk |
Summarize risk with warnings | No |
open_vault |
Open a new vault via DSProxy | Yes |
deposit_and_mint |
Open-and-mint or add collateral and mint | Yes |
mint_usdd |
Draw more USDD from a vault | Yes |
repay_usdd |
Repay vault debt | Yes |
withdraw_collateral |
Withdraw collateral from a vault | Yes |
close_vault |
Wipe all debt and free collateral | Yes |
PSM
| Tool | Description | Write? |
|---|---|---|
get_psm_status |
Inspect PSM fees and enablement | No |
get_psm_metrics |
Get PSM swap metrics by route (fromToken/toToken/available/fee) | No |
psm_swap_to_usdd |
Swap gem into USDD | Yes |
psm_swap_from_usdd |
Swap USDD into gem | Yes |
USDD Savings
| Tool | Description | Write? |
|---|---|---|
get_savings_status |
Show USDD Savings metrics | No |
deposit_savings |
Deposit USDD into sUSDD |
Yes |
withdraw_savings |
Withdraw USDD from sUSDD |
Yes |
Token Transfers
Two-step preview → confirm flow for safe asset transfers. The AI must present the transfer details to the user and wait for explicit confirmation before executing.
| Tool | Description | Write? |
|---|---|---|
prepare_token_transfer |
Preview a native or token transfer; returns a confirmationId and transfer details for user review |
No |
confirm_token_transfer |
Execute a previously prepared transfer after user has explicitly confirmed | Yes |
Supports:
- TRX (TRON native)
- TRC20 tokens (USDD, USDT, WBTC, etc.)
- ETH / BNB (EVM native)
- ERC20 tokens on Ethereum and BSC
Protocol Metrics
Read-only analytics from mainnet data feeds.
| Tool | Description | Write? |
|---|---|---|
get_protocol_metrics |
Aggregated USDD protocol metrics (mainnet) | No |
get_chain_metrics |
Chain-level metrics for tron, eth, or bsc |
No |
get_collateral_prices |
Latest collateral highest-price data from website API | No |
get_psm_metrics |
PSM route metrics: fromToken, toToken, available liquidity, fees | No |
Treasury
| Tool | Description | Write? |
|---|---|---|
get_treasury_summary |
Latest USDD treasury report summary (mainnet) | No |
get_jst_buyback_stats |
JST buyback and burn statistics from treasury data | No |
Smart Allocator
| Tool | Description | Write? |
|---|---|---|
get_smart_allocator_overview |
Smart Allocator overview: debt, invested amount, earnings, APY | No |
get_assets_breakdown |
Invested-asset breakdown by protocol, network, or asset |
No |
get_proof_of_reserve |
Proof-of-reserve style platform investment details | No |
get_debt_overview |
Debt overview grouped by network vault | No |
Prompts
| Prompt | Description |
|---|---|
open_usdd_vault |
Open a vault and verify post-trade risk |
manage_vault_lifecycle |
Run full vault lifecycle flows |
use_psm |
Use PSM with fee checks |
use_savings |
Use USDD Savings with inspection and verification |
review_vault_risk |
Explain risk for a vault |
repay_and_close_vault |
Repay and close with verification |
Architecture
mcp-server-usdd/
├── src/
│ ├── core/
│ │ ├── chains.ts
│ │ ├── abis.ts
│ │ ├── tools.ts
│ │ ├── prompts.ts
│ │ ├── resources.ts
│ │ ├── browser-signer.ts
│ │ └── services/
│ │ ├── clients.ts
│ │ ├── contracts.ts
│ │ ├── protocol.ts
│ │ ├── vault.ts
│ │ ├── psm.ts
│ │ ├── savings.ts
│ │ ├── tokens.ts
│ │ ├── transfer.ts ← token/native transfer (prepare + confirm)
│ │ ├── treasury.ts ← treasury report and JST buyback stats
│ │ ├── smart-allocator.ts ← Smart Allocator analytics
│ │ ├── website-metrics.ts ← protocol metrics, chain metrics, collateral prices
│ │ ├── wallet.ts
│ │ └── utils.ts
│ ├── index.ts
│ └── server/
│ ├── server.ts
│ └── http-server.ts
└── build/
Notes
- Vault writes assume the configured wallet can sign on the target chain.
- All tools default to the family-specific defaults set by
set_network; ifnetworkis omitted, tron-family default is used unless the tool call explicitly passesnetwork. - ERC20/TRC20 flows often require
approve_tokenfirst. - Browser mode now supports real transaction signing on TRON networks (
tron,tron_nile) viatronlink-signer(TronLink/TIP-6963 flow). EVM networks currently continue to use agent-wallet signing. deposit_and_mintis idempotent with respect to vault creation: it checks for an existing vault for the given ilk before opening a new one. If no vault exists, it submits two separate transactions —openthenlockGemAndDraw— to avoid combined-tx reliability issues on TRON.- Token transfers use a two-step flow:
prepare_token_transferreturns a preview andconfirmationId;confirm_token_transferexecutes only after the user explicitly approves. Pending confirmations expire after 10 minutes. - Protocol analytics tools (
get_protocol_metrics,get_chain_metrics,get_collateral_prices, etc.) read from mainnet data feeds only — they do not reflect testnet state. - TRON, ETH, BSC, and internal testnet deployments have similar protocol structure but different addresses and token decimals.
- This version intentionally excludes migration and auction actions so we can iterate the Vault + PSM + USDD Savings core first.
Security Considerations
- Private keys are encrypted and stored locally in
~/.agent-wallet/. - Private keys are never returned by MCP tools.
- The optional
AGENT_WALLET_PASSWORDis intended for automation and CI environments. - Write operations should be treated as state-changing actions and reviewed carefully before execution.
- Vault prompts include risk-review steps so borrowing decisions are checked against current collateral health.
- Test on a safe environment or with small amounts before using mainnet-sized positions.
- Be cautious with large or unlimited token approvals when using
approve_token. - Never share local MCP client configuration files if they contain private keys or sensitive RPC credentials.
Example Conversations
Vault
- "What vault types are available on Ethereum?" → AI calls
get_supported_ilkswithnetwork=ethand summarizes the supported vault collateral types. - "Open a TRX-A/USDT-A/WBTC-A vault on Tron and mint 500 USDD" → AI uses
open_usdd_vault: checks wallet, reviews oracle status, executesdeposit_and_mint(auto-opens a new vault if none exists for that ilk), then verifies the new vault risk. - "Am I close to liquidation on vault 123?" → AI calls
get_vault_summaryandanalyze_vault_risk, then explains the health factor and collateral buffer. - "Repay part of my vault debt on BSC" → AI uses
manage_vault_lifecyclewithaction=repay: checks USDD balance and allowance, callsrepay_usdd, then verifies the updated vault state. - "Close my vault and withdraw the collateral" → AI uses
repay_and_close_vault: checks debt, balance, allowance, callsclose_vault, then confirms the vault state after repayment.
PSM
- "What are the current PSM fees on Ethereum?" → AI calls
get_psm_statuswithnetwork=ethand reports fee-in, fee-out, and whether swaps are enabled. - "Show me available PSM liquidity for USDT on TRON" → AI calls
get_psm_metricswith the PSM-USDT market and reports available amounts and fees for both directions. - "Swap 10,000 USDT into USDD through the PSM" → AI uses
use_psm: checks PSM status, then callspsm_swap_to_usddand reports the transaction result. - "Swap 5,000 USDD back to USDC on BSC" → AI calls
get_psm_status, then executespsm_swap_from_usddand reminds the user to re-check balances.
Token & Balances
- "What is my USDD balance on Tron?" → AI calls
get_protocol_overviewto identify the USDD token address, then callsget_token_balance. - "Do I have enough allowance for the USDT PSM?" → AI calls
check_allowancewith the token and PSM spender, then suggestsapprove_tokenonly if needed. - "Send 100 USDD to TXxxx... on Tron" → AI calls
prepare_token_transferand displays the transfer preview (from, to, amount, balance). After the user confirms, AI callsconfirm_token_transferto execute. - "Transfer 0.5 ETH to 0xabc..." → AI calls
prepare_token_transferfor native ETH, presents the details, then waits for user approval before executing.
USDD Savings
- "What is the current USDD Savings status on Ethereum?" → AI calls
get_savings_statusand summarizes total assets, savings rate, and wallet shares. - "Deposit 2,000 USDD into sUSDD" → AI uses
use_savings: checks savings status, callsdeposit_savings, then re-checks savings metrics. - "Withdraw 500 USDD from sUSDD on BSC" → AI calls
get_savings_status, executeswithdraw_savings, and confirms the updated share balance.
Protocol Analytics
- "What are the overall USDD protocol metrics?" → AI calls
get_protocol_metricsand reports total collateral, debt ceiling, and utilization. - "Show me TRON chain metrics" → AI calls
get_chain_metricswithchain=tronand summarizes collateral breakdown and USDD supply on TRON. - "What are the latest collateral prices?" → AI calls
get_collateral_pricesand lists each collateral type with its current highest price.
Treasury & Smart Allocator
- "Show me the USDD treasury summary" → AI calls
get_treasury_summaryand reports reserve breakdown, collateral ratio, and recent changes. - "How much JST has been bought back and burned?" → AI calls
get_jst_buyback_statsand summarizes cumulative JST buyback volume and burn totals. - "What is the Smart Allocator overview?" → AI calls
get_smart_allocator_overviewand reports total debt allocated, current invested amount, accumulated earnings, and APY. - "Break down Smart Allocator investments by protocol" → AI calls
get_assets_breakdownwithdimension=protocoland lists each DeFi protocol with its allocated amount. - "Show me the Smart Allocator proof of reserve" → AI calls
get_proof_of_reserveand details each platform investment with amounts and verification status. - "What does the Smart Allocator debt look like by network?" → AI calls
get_debt_overviewand summarizes debt positions grouped by TRON/ETH/BSC vaults.
License
MIT License Copyright (c) 2026 USDD
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.