Skip to main content
Glama
README.md
# sdp-mcp

[![npm version](https://img.shields.io/npm/v/sdp-mcp.svg)](https://www.npmjs.com/package/sdp-mcp)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Node](https://img.shields.io/badge/Node-%E2%89%A520-339933.svg)](https://nodejs.org/)
[![TypeScript](https://img.shields.io/badge/TypeScript-5.7-3178C6.svg)](https://www.typescriptlang.org/)
[![MCP](https://img.shields.io/badge/MCP-%2351-black.svg)](https://modelcontextprotocol.io/)

**76-tool MCP server for the Solana Developer Platform -- stablecoin issuance, payments, trading, wallets, and compliance.**

The only MCP bridge to [SDP](https://platform.solana.com). Built for enterprise Solana development. Covers the full SDP API surface: issue stablecoins and RWAs, move money on/off-chain, trade via DEX aggregation, manage wallets and custody, and screen addresses for compliance -- all from any MCP-compatible AI agent.

SDP is the enterprise gateway to Solana used by Mastercard, Western Union, Worldpay, and other global payment networks.

---

## Tool Count by Family

| Family | Tools | Coverage |
|--------|------:|----------|
| **Issuance** | 28 | Stablecoins, tokenized deposits, RWAs, templates, deploy, mint, burn, freeze, pause, seize, allowlist, authorities |
| **Wallets** | 14 | Create, delete, initialize, custody switching, signing configs, balances, public keys, signer verification |
| **Projects** | 10 | CRUD, member management, project-scoped API keys |
| **Payments** | 9 | Fiat on/off-ramp, stablecoin transfer, fee estimation, wallet balances, payment policies |
| **API Keys** | 6 | CRUD, rotation with grace period |
| **Trading** | 6 | DEX swap quotes, swap execution (Jito bundles), automated vaults (DCA/TWAP/limit/rebalance), FX rates |
| **Health** | 2 | Service health, dependency readiness |
| **Compliance** | 1 | Address screening (Chainalysis, Elliptic, TRM Labs) |
| **Total** | **76** | |

---

## Quick Start

### npx (zero install)

```bash
SDP_API_KEY=your-key npx sdp-mcp
```

### Claude Desktop / Claude Code

Add to `claude_desktop_config.json` (or `.mcp.json`):

```json
{
  "mcpServers": {
    "sdp": {
      "command": "npx",
      "args": ["-y", "sdp-mcp"],
      "env": {
        "SDP_API_KEY": "your-key-here",
        "SDP_NETWORK": "devnet"
      }
    }
  }
}
```

### Global install

```bash
npm install -g sdp-mcp
SDP_API_KEY=your-key sdp-mcp
```

---

## Environment Variables

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `SDP_API_KEY` | Yes | -- | SDP API key for authentication |
| `SDP_API_URL` | No | `https://api.platform.solana.com` | Base URL for the SDP API |
| `SDP_NETWORK` | No | `devnet` | Solana network (`devnet`, `testnet`, `mainnet-beta`) |

---

## Full Tool Reference

### Health (2)

| Tool | Description |
|------|-------------|
| `sdp_health_check` | Check SDP service health, API version, and uptime. No auth required. |
| `sdp_health_ready` | Check readiness of all SDP dependencies (database, RPC, custody). |

### API Keys (6)

| Tool | Description |
|------|-------------|
| `sdp_api_key_list` | List all account-level API keys with permissions and status. |
| `sdp_api_key_create` | Create a new API key with permission scoping and IP allowlist. |
| `sdp_api_key_get` | Get details of a specific API key by ID. |
| `sdp_api_key_update` | Update key name, permissions, or IP allowlist. |
| `sdp_api_key_delete` | Permanently revoke an API key. |
| `sdp_api_key_rotate` | Rotate a key with configurable grace period (default 24h). |

### Wallets (14)

| Tool | Description |
|------|-------------|
| `sdp_wallet_initialize` | Initialize wallet signing with a custody provider (Privy, Fireblocks, BitGo, etc.). |
| `sdp_wallet_create` | Create a new Solana wallet with optional label and project association. |
| `sdp_wallet_get` | Get wallet details including public key, balances, and custody provider. |
| `sdp_wallet_list` | List all wallets with IDs, labels, public keys, and balances. |
| `sdp_wallet_update` | Update a wallet's label. |
| `sdp_wallet_delete` | Permanently delete a wallet (ensure zero balance first). |
| `sdp_wallet_set_default` | Set the default wallet for signing operations. |
| `sdp_wallet_get_public_key` | Get the base58-encoded public key for a wallet. |
| `sdp_wallet_get_signing_config` | Get the active custody provider and signing policy. |
| `sdp_wallet_list_signing_configs` | List all initialized custody providers and their configurations. |
| `sdp_wallet_aggregate_balances` | Sum token holdings across all wallets, optionally by mint. |
| `sdp_wallet_list_switch_options` | List available custody providers for migration. |
| `sdp_wallet_switch_custody` | Migrate signing from one custody provider to another. |
| `sdp_wallet_signer_check` | Verify custody signing works by sending a memo transaction. |

### Projects (10)

| Tool | Description |
|------|-------------|
| `sdp_project_list` | List all projects with names, IDs, and creation dates. |
| `sdp_project_create` | Create a new project as an organizational container. |
| `sdp_project_get` | Get project details by ID. |
| `sdp_project_update` | Update project name or description. |
| `sdp_project_delete` | Permanently delete a project and disassociate resources. |
| `sdp_project_list_members` | List project members with roles and join dates. |
| `sdp_project_add_member` | Add a member by email with role assignment. |
| `sdp_project_remove_member` | Remove a member and revoke their project access. |
| `sdp_project_list_api_keys` | List API keys scoped to a specific project. |
| `sdp_project_create_api_key` | Create a project-scoped API key. |

### Issuance (28)

| Tool | Description |
|------|-------------|
| `sdp_create_stablecoin` | Issue a Token-2022 stablecoin with configurable authorities and supply cap. |
| `sdp_create_tokenized_deposit` | Issue a tokenized bank deposit (demand, time, savings). |
| `sdp_create_rwa` | Issue a real-world asset token with transfer restrictions and valuation oracle. |
| `sdp_get_token_info` | Get token metadata and on-chain state. |
| `sdp_list_tokens` | List issued tokens, filterable by type. |
| `sdp_mint_tokens` | Mint new supply to a recipient wallet. |
| `sdp_issuance_list_templates` | List available token templates (stablecoin, security, custom). |
| `sdp_issuance_get_template` | Get full template configuration and default parameters. |
| `sdp_issuance_update_token` | Update token name, symbol, or metadata. |
| `sdp_issuance_deploy_token` | Deploy a token on-chain (execute mode, SDP signs). |
| `sdp_issuance_deploy_token_prepare` | Prepare unsigned deployment transaction for external signing. |
| `sdp_issuance_mint_tokens_prepare` | Prepare unsigned mint transaction for external signing. |
| `sdp_issuance_burn_tokens` | Burn tokens to reduce supply (execute mode). |
| `sdp_issuance_burn_tokens_prepare` | Prepare unsigned burn transaction for external signing. |
| `sdp_issuance_force_burn` | Force-burn from any account using permanent delegate authority. |
| `sdp_issuance_force_burn_prepare` | Prepare unsigned force-burn transaction. |
| `sdp_issuance_seize_tokens` | Force-transfer (seize) tokens for regulatory compliance. |
| `sdp_issuance_seize_tokens_prepare` | Prepare unsigned seizure transaction. |
| `sdp_issuance_update_authority` | Change token authority (mint, freeze, close, delegate). |
| `sdp_issuance_update_authority_prepare` | Prepare unsigned authority update transaction. |
| `sdp_issuance_pause_token` | Globally pause all transfers for a token. |
| `sdp_issuance_unpause_token` | Resume transfers for a paused token. |
| `sdp_issuance_freeze_account` | Freeze a specific token account. |
| `sdp_issuance_unfreeze_account` | Unfreeze a previously frozen account. |
| `sdp_issuance_list_frozen_accounts` | List all frozen accounts for a token. |
| `sdp_issuance_manage_allowlist` | List or add entries to a token's transfer allowlist. |
| `sdp_issuance_remove_allowlist_entry` | Remove an address from the transfer allowlist. |
| `sdp_issuance_list_token_transactions` | List transactions for a specific token with filtering. |

### Payments (9)

| Tool | Description |
|------|-------------|
| `sdp_create_onramp` | Fiat-to-stablecoin onramp (Stripe, Circle, MoonPay). |
| `sdp_create_offramp` | Stablecoin-to-fiat offramp (ACH, SEPA, PIX). |
| `sdp_transfer_stablecoin` | Transfer stablecoins between wallets with auto ATA creation. |
| `sdp_get_payment_status` | Check payment status by ID. |
| `sdp_list_payments` | List payment history with filtering and pagination. |
| `sdp_estimate_fees` | Estimate fees before executing a payment. |
| `sdp_payments_get_wallet_balances` | Get SOL, USDC, and all SPL token balances for a wallet. |
| `sdp_payments_get_wallet_policies` | Get payment policies (allowlist, limits) for a wallet. |
| `sdp_payments_update_wallet_policies` | Update destination allowlist and transfer limits. |

### Trading (6)

| Tool | Description |
|------|-------------|
| `sdp_get_swap_quote` | Get best-price swap quotes via DEX aggregation (Jupiter, Raydium, Orca). |
| `sdp_execute_swap` | Execute a swap with optional Jito bundle for MEV protection. |
| `sdp_create_vault` | Create an automated trading vault (DCA, TWAP, limit, rebalance). |
| `sdp_get_vault_info` | Get vault state, performance metrics, and PnL. |
| `sdp_list_vaults` | List vaults with strategy, status, and owner filtering. |
| `sdp_get_fx_rate` | Get exchange rates: crypto-crypto, crypto-fiat, fiat-fiat. |

### Compliance (1)

| Tool | Description |
|------|-------------|
| `sdp_compliance_screen_address` | Screen address against Chainalysis, Elliptic, Range, and TRM Labs. |

---

## Architecture

- **@psm/mcp-core-ts** -- shared MCP infrastructure (McpAction, output filtering, rate limiting, input validation)
- **@modelcontextprotocol/sdk** -- MCP protocol transport (stdio)
- **zod** + **zod-to-json-schema** -- input validation with auto-generated JSON schemas
- **fetch** -- HTTP client for SDP API calls (no external HTTP deps)

## Security

- API key redacted from error messages and responses
- Output filter strips secrets (API keys, tokens, JWTs) and PII from all responses
- Rate limited to 60 calls/minute
- Input parameter length limits enforced (8KB max per field)
- Control characters stripped from all string inputs
- Tool name injection validation

## License

MIT