Create Test Pool
Overview
Deploys a custom Uniswap pool on the local testnet with exact parameters you specify. This lets you create controlled test environments -- thin liquidity pools, extreme price ranges, specific fee tiers -- to test how agents behave under edge conditions.
Why this is 10x better than doing it manually:
- No Solidity scripting: Creating a V3 pool manually requires calling
createAndInitializePoolIfNecessary, computingsqrtPriceX96, calculating tick ranges, approving tokens, and callingmint. This does it all with natural language. - Token resolution: Say "WETH/USDC" and it resolves addresses, decimals, and sorts tokens correctly. No need to look up contract addresses.
- Automatic funding: If the deployer account doesn't have enough tokens, the tool handles whale impersonation to fund the deployment.
- Price-to-tick conversion: Specify a price like "2000" (USDC per WETH) and the tool computes the correct
sqrtPriceX96and tick range. - Edge case testing: Create pools with $100 liquidity to test thin-market behavior, or pools at extreme prices to test boundary conditions.
- Verification: After deployment, you can immediately query the pool with
get_pool_infoto confirm state.
When to Use
Activate when the user says anything like:
- "Create a WETH/USDC pool with thin liquidity"
- "Deploy a test pool with 0.05% fee"
- "Set up a DAI/USDC pool at 1:1"
- "Create a pool with only $1000 liquidity"
- "Deploy a V2 pair for testing"
- "I need a pool with a narrow tick range"
- "Create a WBTC/WETH pool at the current price"
- "Set up a pool to test high slippage scenarios"
Do NOT use when no testnet is running (use setup-local-testnet first), or when the user wants to interact with existing mainnet pools (use analyze-pool).
Parameters
| Parameter | Required | Default | How to Extract |
|---|---|---|---|
| token0 | Yes | -- | First token: "WETH", "USDC", or a 0x address |
| token1 | Yes | -- | Second token: "USDC", "DAI", or a 0x address |
| version | No | v3 | "v2" or "v3" |
| fee | No | 3000 | Fee tier: 100 (0.01%), 500 (0.05%), 3000 (0.3%), 10000 (1%) |
| initialPrice | No | -- | Price of token0 in token1 terms (e.g. 2000 for ETH at $2000) |
| liquidityUsd | No | 1,000,000 | Dollar value of initial liquidity |
| tickLower | No | auto | V3 lower tick (advanced users only) |
| tickUpper | No | auto | V3 upper tick (advanced users only) |
Workflow
Step 1: Verify Testnet is Running
If the tool returns TESTNET_NOT_RUNNING, tell the user:
No local testnet is running. Let me set one up first.
Then suggest using setup-local-testnet or offer to do it for them.
Step 2: Extract Parameters
Parse the user's request carefully:
- Token pair: "WETH/USDC", "ETH/DAI", "WBTC/WETH"
- Map "ETH" to "WETH" (Uniswap uses wrapped ETH)
- Fee tier: "0.05% fee" → 500, "0.3%" → 3000, "1%" → 10000, "0.01%" → 100
- Price: "at $2000" → initialPrice: 2000 (for WETH/USDC)
- Liquidity: "thin liquidity" → liquidityUsd: 1000, "$10M" → liquidityUsd: 10000000
- Version: "V2 pair" → version: "v2", default is "v3"
Common liquidity descriptions:
- "thin" / "low" / "shallow" → $1,000 - $10,000
- "moderate" / "normal" → $100,000 - $1,000,000
- "deep" / "high" → $10,000,000+
Step 3: Fund Deployer If Needed
If the pool requires tokens the deployer might not have, call mcp__uniswap__fund_test_account first to ensure the deployer (account #1: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266) has sufficient tokens.
Step 4: Deploy the Pool
Call mcp__uniswap__deploy_mock_pool with the extracted parameters.
Step 5: Verify and Present
Present the deployed pool with full details:
Test Pool Deployed
Pool: WETH/USDC (V3, 0.05% fee)
Address: 0xNEW...
Price: 1 WETH = 2,000 USDC
Liquidity: ~$1,000,000
Tick Range: -204714 to -199514 (±50% around current price)
Token0: USDC 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 (6 decimals)
Token1: WETH 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 (18 decimals)
Test Scenarios This Pool Enables:
- Swap testing: "Get a quote for 1 WETH → USDC"
- LP testing: "Add liquidity to the WETH/USDC pool"
- Price impact: "What's the price impact of swapping 100 WETH?"
- Time-dependent: "Advance 7 days and check fee accumulation"
Step 6: Suggest Follow-ups
Next Steps:
- Query pool state: "Get info on pool 0xNEW..."
- Test a swap against this pool
- Create another pool with different parameters
- Advance time to test fee accumulation: "Time travel 7 days"
Important Notes
- Tokens are automatically sorted. Uniswap requires token0 < token1 by address. The tool handles this.
- V3 pools need initialization. The tool calls
createAndInitializePoolIfNecessarywhich sets the initial price. - Default tick range is ±50%. If no tick range is specified, liquidity is spread across a wide range around the initial price.
- Deployer is Anvil account #1. The first Anvil default account is used for deployment.
- Pool may already exist on fork. If you fork Ethereum and try to create a WETH/USDC 0.05% pool, it already exists. The tool will add liquidity to the existing pool.
- V2 pools always have 0.3% fee. The fee parameter is ignored for V2.
Error Handling
| Error | User-Facing Message | Suggested Action |
|---|---|---|
TESTNET_NOT_RUNNING | "No local testnet is running." | Run setup-local-testnet first |
TESTNET_TOKEN_NOT_FOUND | "Cannot resolve token X." | Use a well-known symbol or provide the 0x address |
TESTNET_CONTRACT_NOT_FOUND | "NonfungiblePositionManager not found on this chain." | Fork Ethereum mainnet which has all V3 contracts |
TESTNET_DEPLOY_POOL_FAILED | "Failed to deploy pool: {reason}" | Check token balances, fund deployer if needed |