# Stargate Bridge MCP An MCP server that enables cross-chain token transfers via the Stargate protocol. ![GitHub License](https://img.shields.io/github/license/kukapay/stargate-bridge-mcp) ![Python Version](https://img.shields.io/badge/python-3.10%2B-blue) ![Status](https://img.shields.io/badge/status-active-brightgreen.svg) ## Features - **Chain Discovery**: List all supported blockchains with key details. - **Token Discovery**: Find bridgeable tokens across chains. - **Quote Fetching**: Get real-time bridge quotes with fees, estimates, and transaction steps. - **Automated Bridging**: Execute transfers with automatic signing and broadcasting using your private key. - **MCP Integration**: Fully compliant with MCP spec for easy use in Claude, Cursor, or other MCP clients. | Tool | Description | Key Parameters | |------|-------------|----------------| | `list_chains` | Lists supported chains in a sorted Markdown table. | None | | `list_bridgeable_tokens` | Lists bridgeable destinations for a source token. | `src_chain_key`, `src_token` | | `get_quotes` | Fetches detailed quotes for a bridge route. | `src_chain_key`, `dst_chain_key`, `src_token`, `dst_token`, `src_amount`, `dst_amount_min` (optional: `src_address`, `dst_address`) | | `bridge_transfer` | Executes a bridge transfer (uses first quote). | `src_chain_key`, `dst_chain_key`, `src_token`, `dst_token`, `src_amount`, `dst_amount_min` (optional: `dst_address`) | ## Known Limitations Currently supports cross-chain bridging only between EVM-compatible chains (e.g., Ethereum, Polygon, Arbitrum). Non-EVM chains like Solana are planned for future support. ## Quick Start ### Prerequisites - Python 3.10+ - [uv](https://docs.astral.sh/uv/) for dependency management (recommended; fallback to pip) - A `.env` file with your Ethereum-compatible private key (e.g., `PRIVATE_KEY=0x...`). **Never commit this file!** ### Installation 1. Clone the repo: ``` git clone https://github.com/kukapay/stargate-bridge-mcp.git cd stargate-bridge-mcp ``` 2. Install dependencies with uv: ``` uv sync # Or uv add requests web3 python-dotenv "mcp[cli]" ``` 3. Install to Claude Desktop: Install the server as a Claude Desktop application: ```bash uv run mcp install main.py --name "Stargate Bridge" ``` Configuration file as a reference: ```json { "mcpServers": { "Stargate Bridge": { "command": "uv", "args": [ "--directory", "/path/to/stargate-bridge-mcp", "run", "main.py" ], "env": { "PRIVATE_KEY": "your_private_key"} } } } ``` Replace `/path/to/stargate-bridge-mcp` with your actual installation path, and replace `your_private_key` with your wallet private key. ## Usage Examples These examples simulate interactions in an MCP client like Claude Desktop. Each includes a natural language prompt, the tool call, and sample output. ### 1. List Supported Chains **Prompt**: "Show me all the chains supported by Stargate for bridging." **Tool Call**: `list_chains()` **Sample Output** (Markdown table, sorted by chainKey): ``` | chainKey | Name | Chain Type | Chain ID | Native Symbol | |----------|------|------------|----------|---------------| | arbitrum | Arbitrum One | evm | 42161 | ETH | | avalanche | Avalanche C-Chain | evm | 43114 | AVAX | | base | Base | evm | 8453 | ETH | | bnbchain | BNB Smart Chain | evm | 56 | BNB | | ethereum | Ethereum | evm | 1 | ETH | | ... (additional chains) ``` ### 2. List Bridgeable Tokens **Prompt**: "What tokens can I bridge USDC from Ethereum to other chains?" **Tool Call**: `list_bridgeable_tokens("ethereum", "0xA0b86a33E641b9E649bEe6b2D5D7b5b4D8f3a0a")` (USDC on Ethereum) **Sample Output** (Markdown table, sorted by Chain Key): ``` | Chain Key | Symbol | Address | |-----------|--------|---------| | arbitrum | USDC | 0xA0b86a33E641b9E649bEe6b2D5D7b5b4D8f3a0a | | avalanche | USDC | 0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E | | polygon | USDC | 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 | | ... (additional destinations) ``` ### 3. Get Bridge Quotes **Prompt**: "Get quotes for bridging 10 USDC from Ethereum to Polygon with 1% slippage." **Tool Call**: `get_quotes("ethereum", "polygon", "0xA0b86a33E641b9E649bEe6b2D5D7b5b4D8f3a0a", "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", 10.0, 9.9)` **Sample Output** (Concise Markdown): ``` # Stargate Bridge Quotes **Src**: ETHEREUM USDC 10.0 → **Dst**: POLYGON USDC ## Quote 1 (stargate/v2/taxi) - **Expected Receive**: 9.98 USDC - **Min Receive**: 9.90 USDC - **Est. Time**: 180s - **Fees**: - 0.000050 ETH on ethereum (message) ### Steps - **Step 1 (bridge)**: To 0x77b204... | Value: 0.0100 ETH | Data: 0xc7c7f5b3... **Note**: Use `bridge_transfer` to execute (uses first quote). ``` ### 4. Execute Bridge Transfer **Prompt**: "Execute the bridge for 10 USDC from Ethereum to Polygon." **Tool Call**: `bridge_transfer("ethereum", "polygon", "0xA0b86a33E641b9E649bEe6b2D5D7b5b4D8f3a0a", "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", 10.0, 9.9)` **Sample Output** (On success; Markdown): ``` ## Bridge Transfer Successful Transaction hashes: - Step 1: 0x1234abcd...efgh5678 ``` **Note**: If it fails (e.g., insufficient gas), returns an error like `# Error\nStep 1 failed (reverted).` ## License MIT License - see [LICENSE](LICENSE) for details.