uniswap-trader-mcp
by kukapay
Verified
# Uniswap Trader MCP
An MCP server for AI agents to automate token swaps on Uniswap DEX across multiple blockchains.
## Features
- **Price Quotes**: Get real-time price quotes for token swaps with multi-hop route optimization.
- **Swap Execution**: Execute swaps on Uniswap V3 with configurable slippage tolerance and deadlines.
- **Swap Suggestions**: Generate trading suggestions based on liquidity, fees, and optimal paths.
- **Multi-Chain Support**: Compatible with Ethereum, Optimism, Polygon, Arbitrum, Celo, BNB Chain, Avalanche, and Base.
## Prerequisites
- **Node.js**: Version 14.x or higher.
- **npm**: For package management.
- **Wallet**: A funded wallet with a private key for executing swaps.
- **RPC Endpoints**: Access to blockchain RPC URLs (e.g., Infura, Alchemy) for supported chains.
## Installation
1. **Clone the Repository**:
```bash
git clone https://github.com/kukapay/uniswap-trader-mcp.git
cd uniswap-trader-mcp
```
2. **Install Dependencies**:
```bash
npm install
```
## Configuration
```json
{
"mcpServers": {
"Uniswap-Trader-MCP": {
"command": "node",
"args": ["path/to/uniswap-trader-mcp/server/index.js"],
"env": {
"INFURA_KEY": "your infura key",
"WALLET_PRIVATE_KEY": "your private key"
}
}
}
}
```
## Usage
### Supported Chains
The following blockchains are supported. Ensure each chain is configured in `chainConfigs.js` with a valid RPC URL, WETH address, and SwapRouter address.
| Chain ID | Name | Notes |
|----------|--------------|--------------------------------------------|
| 1 | Ethereum | Mainnet, widely used for Uniswap trades |
| 10 | Optimism | Layer 2, requires Optimism RPC |
| 137 | Polygon | Fast and low-cost, uses MATIC as native |
| 42161 | Arbitrum | Layer 2, Arbitrum One network |
| 42220 | Celo | Mobile-first blockchain, uses CELO |
| 56 | BNB Chain | Binance Smart Chain, uses BNB |
| 43114 | Avalanche | High-throughput, uses AVAX |
| 8453 | Base | Coinbase’s Layer 2, built on Optimism |
### Tools and Prompts
#### 1. `getPrice`
Fetches a price quote for a Uniswap swap.
**Schema**:
- `chainId`: Number (default: 1)
- `tokenIn`: String (e.g., `"NATIVE"` or token address)
- `tokenOut`: String (e.g., `"NATIVE"` or token address)
- `amountIn`: String (optional, required for `"exactIn"`)
- `amountOut`: String (optional, required for `"exactOut"`)
- `tradeType`: `"exactIn"` or `"exactOut"` (default: `"exactIn"`)
Example prompt:
```
Get me a price quote for swapping 1 ETH to DAI on Ethereum.
```
Output:
```
{
"chainId": 1,
"tradeType": "exactIn",
"price": "3000.50",
"inputAmount": "1.000000",
"outputAmount": "3000.50",
"minimumReceived": "2985.50",
"maximumInput": "1.005000",
"route": [
{
"tokenIn": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"tokenOut": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"fee": 3000
}
],
"estimatedGas": "150000"
}
```
#### 2. `executeSwap`
Executes a swap on Uniswap.
**Schema**:
- `chainId`: Number (default: 1)
- `tokenIn`: String
- `tokenOut`: String
- `amountIn`: String (optional, required for `"exactIn"`)
- `amountOut`: String (optional, required for `"exactOut"`)
- `tradeType`: `"exactIn"` or `"exactOut"` (default: `"exactIn"`)
- `slippageTolerance`: Number (default: 0.5, in percentage)
- `deadline`: Number (default: 20, in minutes)
Example prompt:
```
Swap 1 ETH for DAI on Ethereum with a 0.5% slippage tolerance and a 20-minute deadline.
```
Output:
```
{
"chainId": 1,
"txHash": "0x1234...abcd",
"tradeType": "exactIn",
"amountIn": "1.000000",
"outputAmount": "2990.75",
"minimumReceived": "2985.50",
"maximumInput": "1.005000",
"fromToken": "NATIVE",
"toToken": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"route": [
{
"tokenIn": "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
"tokenOut": "0x6B175474E89094C44Da98b954EedeAC495271d0F",
"fee": 3000
}
],
"gasUsed": "145000"
}
```
## License
MIT License. See [LICENSE](LICENSE) for details.