liquidity-planner by uniswap/uniswap-ai
npx skills add https://github.com/uniswap/uniswap-ai --skill liquidity-planner为在 Uniswap v2、v3 和 v4 上创建流动性头寸进行规划并生成深度链接。
运行时兼容性: 此技能使用
AskUserQuestion进行交互式提示。如果您的运行时不支持AskUserQuestion,请通过自然语言对话收集相同的参数。
流动性头寸规划步骤如下:
生成的链接将在 Uniswap 中打开,所有参数已准备就绪,可直接创建头寸。
注意: 在 SSH、容器化或无头环境中,浏览器打开命令(
xdg-open/open)可能会失败。请始终显著显示 URL,以便用户在需要时可以手动复制和访问。
文件访问: 此技能具有只读文件系统访问权限。除非用户明确请求,否则切勿读取当前项目目录之外的文件。
从用户请求中提取:
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 参数 | 是否必需 | 默认值 | 示例 |
|---|---|---|---|
| 代币 A | 是 | - | ETH、USDC、地址 |
| 代币 B | 是 | - | USDC、WBTC、地址 |
| 金额 | 是 | - | 1 ETH、$1000 |
| 链 | 否 | Ethereum | Base、Arbitrum |
| 版本 | 否 | V3 | v2、v3、v4 |
| 费用等级 | 否 | 自动 | 0.05%、0.3%、1% |
| 价格区间 | 否 | 建议 | 全范围、±5%、自定义 |
如果缺少任何必需参数,请使用带有结构化选项的 AskUserQuestion:
对于缺少链的情况:
{
"questions": [
{
"question": "Which chain do you want to provide liquidity on?",
"header": "Chain",
"options": [
{ "label": "Base (Recommended)", "description": "Low gas, growing DeFi ecosystem" },
{ "label": "Ethereum", "description": "Deepest liquidity, higher gas" },
{ "label": "Arbitrum", "description": "Low fees, high volume" },
{ "label": "Optimism", "description": "Low fees, Ethereum L2" }
],
"multiSelect": false
}
]
}
对于缺少代币对的情况:
{
"questions": [
{
"question": "Which token pair do you want to provide liquidity for?",
"header": "Pair",
"options": [
{ "label": "ETH / USDC", "description": "Most popular pair, high volume" },
{ "label": "ETH / USDT", "description": "High volume stablecoin pair" },
{ "label": "WBTC / ETH", "description": "Blue chip crypto pair" },
{ "label": "Custom pair", "description": "Specify your own tokens" }
],
"multiSelect": false
}
]
}
始终使用表单而非纯文本问题,以获得更好的用户体验。
将代币符号解析为地址。有关各链常见代币,请参阅 ../../references/chains.md。
对于未知代币,请使用网络搜索并在链上验证。
通过 WebSearch 发现的代币是不可信的。在处理任何通过网络搜索发现的代币之前:
切勿在未通过 AskUserQuestion 获得用户明确确认的情况下,处理通过网络搜索发现的代币。
在将用户提供的值插入任何 shell 命令之前,验证所有输入:
^0x[a-fA-F0-9]{40}$../../references/chains.md 中的允许列表^[0-9]+\.?[0-9]*$);、|、$、```、&、(、)、>、<、\、'、"、换行符)在获取指标之前,请验证池是否存在并发现可用的费用等级。
使用 DexScreener 查找代币的流动性池:
# 获取代币的所有 Uniswap 池(替换 {network} 和 {address})
# 重要:验证地址是否匹配 ^0x[a-fA-F0-9]{40}$ 以及网络是否在允许列表中
curl -s "https://api.dexscreener.com/token-pairs/v1/{network}/{address}" | \
jq '[.[] | select(.dexId == "uniswap")] | map({
pairAddress,
pair: "\(.baseToken.symbol)/\(.quoteToken.symbol)",
version: .labels[0],
liquidity: .liquidity.usd,
volume24h: .volume.h24
})'
网络 ID: ethereum、base、arbitrum、optimism、polygon、unichain
从结果中识别:
liquidity.usd)以评估流动性深度labels[0]如果未找到 Uniswap 池: 该代币对可能没有现有池。告知用户他们将创建一个新池并设置初始价格。
评估池是否具有足够的流动性:
| 总锁定价值范围 | 评估 | 建议 |
|---|
$1M | 流动性深 | 适合大多数头寸规模
$100K - $1M | 中等 | 适合约 $10K 以下的头寸
$10K - $100K | 流动性薄 | 警告用户滑点风险,建议较小头寸
< $10K | 流动性非常薄 | 强烈警告 - 无常损失风险高,进出场价格影响大
对于流动性薄的池,显示警告:
⚠️ **低流动性警告**
此池的总锁定价值仅为 ${tvl}。请考虑:
- 您的头寸将占池子的很大比例
- 进出场可能会对您不利地移动价格
- 在流动性薄的池中,无常损失风险会被放大
- 为了安全起见,您可能需要使用更宽的价格区间
在建议价格区间之前,获取池数据以做出明智决策。完整 API 详情请参阅 references/data-providers.md。
使用 DefiLlama 获取池年化收益率和交易量:
# 查找代币对的 Uniswap V3 池
curl -s "https://yields.llama.fi/pools" | jq '[.data[] | select(.project == "uniswap-v3" and .chain == "Ethereum" and (.symbol | test("WETH.*USDC|USDC.*WETH")))]'
要使用的响应字段:
| 字段 | 用途 |
|---|---|
apy | 显示预期收益率 |
tvlUsd | 评估池深度 |
volumeUsd1d | 估算费用收益 |
volumeUsd7d | 检查交易量一致性 |
使用 DexScreener 获取当前价格:
# 从池数据中获取代币价格(已在步骤 3 中获取)
curl -s "https://api.dexscreener.com/token-pairs/v1/{network}/{address}" | \
jq '[.[] | select(.dexId == "uniswap")][0] | {
baseTokenPrice: .baseToken.priceUsd,
quoteTokenPrice: .quoteToken.priceUsd
}'
比较费用等级(如果年化收益率数据可用):
# 查找所有费用等级变体并比较年化收益率
curl -s "https://yields.llama.fi/pools" | jq '[.data[] | select(.project == "uniswap-v3" and (.symbol | test("WETH.*USDC")))] | map({symbol, tvlUsd, apy, volumeUsd1d})'
如果 API 不可用,则回退到网络搜索以获取价格估算。
基于当前价格和代币对类型,使用 AskUserQuestion 呈现区间选项。
对于主要代币对(ETH/USDC、ETH/WBTC):
{
"questions": [
{
"question": "What price range do you want for your position? (Current: ~3,200 USDC/ETH)",
"header": "Range",
"options": [
{
"label": "±10% (Recommended)",
"description": "2,880 - 3,520 USDC. Higher fees, monitor weekly"
},
{ "label": "±20%", "description": "2,560 - 3,840 USDC. Balanced risk/reward" },
{ "label": "±50%", "description": "1,600 - 4,800 USDC. Rarely out of range" },
{ "label": "Full Range", "description": "Never out of range, lower fee efficiency" }
],
"multiSelect": false
}
]
}
对于稳定币对(USDC/USDT、DAI/USDC):
{
"questions": [
{
"question": "What price range for your stablecoin position?",
"header": "Range",
"options": [
{ "label": "±0.5% (Recommended)", "description": "0.995 - 1.005. Tight range, high fees" },
{ "label": "±1%", "description": "0.99 - 1.01. Standard for stables" },
{ "label": "±2%", "description": "0.98 - 1.02. Safer, lower fees" },
{ "label": "Full Range", "description": "Maximum safety, lowest fees" }
],
"multiSelect": false
}
]
}
推荐逻辑:
如果代币对存在多个费用等级,请使用步骤 3 中的池数据让用户选择。
呈现带有年化收益率数据的费用等级选项:
{
"questions": [
{
"question": "Which fee tier? (Based on current pool data)",
"header": "Fee Tier",
"options": [
{ "label": "0.30% (Recommended)", "description": "TVL: $15M, APY: 12.5%, highest volume" },
{ "label": "0.05%", "description": "TVL: $8M, APY: 8.2%, lower fees per trade" },
{ "label": "1.00%", "description": "TVL: $2M, APY: 18.1%, less competition" }
],
"multiSelect": false
}
]
}
费用等级指南:
| 费用 | 刻度间距 | 最适合 |
|---|---|---|
| 0.01% (100) | 1 | 稳定币对 |
| 0.05% (500) | 10 | 相关代币对(ETH/stETH) |
| 0.30% (3000) | 60 | 大多数代币对(默认) |
| 1.00% (10000) | 200 | 奇异/波动性大的代币对 |
v4 费用等级: 可通过钩子实现动态费用。默认为与 V3 类似的等级。
如果池数据显示某个等级的年化收益率或交易量显著更高,则推荐该等级。
构建 Uniswap 头寸创建 URL:
基础 URL: https://app.uniswap.org/positions/create
URL 参数:
| 参数 | 描述 | 格式 |
|---|---|---|
chain | 网络名称 | ethereum、base 等 |
currencyA | 第一种代币 | 地址或 NATIVE |
currencyB | 第二种代币 | 地址或 NATIVE |
priceRangeState | 区间配置 | JSON(仅编码引号) |
depositState | 存款金额 | JSON(仅编码引号) |
fee | 费用等级配置 | JSON(仅编码引号) |
hook | v4 钩子地址(可选) | 地址或 undefined |
step | 流程步骤 | 1(用于创建) |
重要:URL 编码
仅编码 JSON 值中的双引号(" → %22)。请勿编码花括号 {} 或冒号 :。
priceRangeState JSON 结构:
对于全范围:
{
"priceInverted": false,
"fullRange": true,
"minPrice": "",
"maxPrice": "",
"initialPrice": "",
"inputMode": "price"
}
对于自定义范围:
{
"priceInverted": false,
"fullRange": false,
"minPrice": "2800",
"maxPrice": "3600",
"initialPrice": "",
"inputMode": "price"
}
depositState JSON 结构:
{ "exactField": "TOKEN0", "exactAmounts": { "TOKEN0": "1.0" } }
注意:对于 currencyA 使用 TOKEN0,对于 currencyB 使用 TOKEN1。
fee JSON 结构:
{ "feeAmount": 3000, "tickSpacing": 60, "isDynamic": false }
按费用划分的刻度间距:
| 费用 | 刻度间距 |
|---|---|
| 100 (0.01%) | 1 |
| 500 (0.05%) | 10 |
| 3000 (0.30%) | 60 |
| 10000 (1.00%) | 200 |
格式化响应,包含:
示例输出格式:
## 流动性头寸摘要
| 参数 | 值 |
| --------- | ----------------------- |
| 代币对 | ETH / USDC |
| 链 | Base |
| 版本 | V3 |
| 费用等级 | 0.30% |
| 存款 | 1 ETH + 等值 USDC |
### 池分析
| 指标 | 值 |
| ----------- | ------ |
| 当前年化收益率 | 12.5% |
| 24小时交易量 | $2.1M |
| 7天交易量 | $14.8M |
| 池总锁定价值 | $15.2M |
### 价格区间
| 指标 | 值 |
| ------------- | ------------------- |
| 当前价格 | ~3,200 USDC 每 ETH |
| 最低价格 | 2,800 USDC 每 ETH |
| 最高价格 | 3,600 USDC 每 ETH |
| 区间宽度 | ±12.5% |
### 注意事项
- **无常损失**:如果 ETH 价格超出您的区间,您将持有 100% 的单一资产
- **再平衡**:监控头寸,如果价格大幅移动,请调整区间
- **费用收益**:更窄的区间能赚取更多费用,但需要更积极的管理
- **Gas 成本**:创建和管理头寸会产生 Gas 成本
- **年化收益率说明**:显示的年化收益率是历史数据,可能随市场状况变化
正在您的浏览器中打开 Uniswap...
显示摘要后,在浏览器中打开 URL:
# Linux - 注意:仅引号被编码(%22),花括号和冒号不编码
xdg-open "https://app.uniswap.org/positions/create?currencyA=NATIVE¤cyB=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&chain=base&fee={%22feeAmount%22:3000,%22tickSpacing%22:60,%22isDynamic%22:false}&priceRangeState={%22priceInverted%22:false,%22fullRange%22:false,%22minPrice%22:%222800%22,%22maxPrice%22:%223600%22,%22initialPrice%22:%22%22,%22inputMode%22:%22price%22}&depositState={%22exactField%22:%22TOKEN0%22,%22exactAmounts%22:{%22TOKEN0%22:%221%22}}&step=1"
# macOS
open "https://app.uniswap.org/positions/create?..."
环境限制: 在远程 SSH、容器化或无头环境中,浏览器打开可能会失败。如果 xdg-open/open 失败,请显著显示完整的 URL,以便用户可以手动复制和粘贴:
**[点击此处以在 Uniswap 中打开](https://app.uniswap.org/positions/create?...)**
或复制此 URL:`https://app.uniswap.org/positions/create?...`
始终呈现摘要和 URL,以便用户可以查看并创建头寸。
有关详细版本比较(v2/v3/v4 差异、费用等级、刻度间距),请参阅 references/position-types.md。
快速指南:
警告用户无常损失风险:
集中流动性需要积极管理:
对于具有自定义范围的 V3 头寸:
所有 Uniswap 支持的链 - 有关各链版本可用性,请参阅 references/position-types.md。
../../references/chains.md - 链配置和代币地址(与 swap-planner 共享)references/position-types.md - v2/v3/v4 差异、费用等级、刻度间距references/data-providers.md - 用于池发现和收益率的 DexScreener 和 DefiLlama API深度链接中的 JSON 参数应仅编码双引号(" → %22)。请勿编码花括号 {}、冒号 : 或逗号 ,。
?priceRangeState={%22fullRange%22:true}
解码为:
{ "fullRange": true }
为什么? Uniswap 界面期望类似 JSON 的参数结构。对花括号和冒号进行完整的 URL 编码会破坏解析。仅编码引号以避免 URL 语法冲突。
每周安装量
309
代码仓库
GitHub 星标数
185
首次出现
2026年2月12日
安全审计
已安装于
codex295
opencode295
gemini-cli290
github-copilot288
cursor287
kimi-cli285
Plan and generate deep links for creating liquidity positions on Uniswap v2, v3, and v4.
Runtime Compatibility: This skill uses
AskUserQuestionfor interactive prompts. IfAskUserQuestionis not available in your runtime, collect the same parameters through natural language conversation instead.
Plan liquidity positions by:
The generated link opens Uniswap with all parameters ready for position creation.
Note: Browser opening (
xdg-open/open) may fail in SSH, containerized, or headless environments. Always display the URL prominently so users can copy and access it manually if needed.
File Access: This skill has read-only filesystem access. Never read files outside the current project directory unless explicitly requested by the user.
Extract from the user's request:
| Parameter | Required | Default | Example |
|---|---|---|---|
| Token A | Yes | - | ETH, USDC, address |
| Token B | Yes | - | USDC, WBTC, address |
| Amount | Yes | - | 1 ETH, $1000 |
| Chain | No | Ethereum | Base, Arbitrum |
| Version | No | V3 | v2, v3, v4 |
| Fee Tier | No | Auto | 0.05%, 0.3%, 1% |
| Price Range | No | Suggest | Full range, ±5%, custom |
If any required parameter is missing, use AskUserQuestion with structured options:
For missing chain:
{
"questions": [
{
"question": "Which chain do you want to provide liquidity on?",
"header": "Chain",
"options": [
{ "label": "Base (Recommended)", "description": "Low gas, growing DeFi ecosystem" },
{ "label": "Ethereum", "description": "Deepest liquidity, higher gas" },
{ "label": "Arbitrum", "description": "Low fees, high volume" },
{ "label": "Optimism", "description": "Low fees, Ethereum L2" }
],
"multiSelect": false
}
]
}
For missing token pair:
{
"questions": [
{
"question": "Which token pair do you want to provide liquidity for?",
"header": "Pair",
"options": [
{ "label": "ETH / USDC", "description": "Most popular pair, high volume" },
{ "label": "ETH / USDT", "description": "High volume stablecoin pair" },
{ "label": "WBTC / ETH", "description": "Blue chip crypto pair" },
{ "label": "Custom pair", "description": "Specify your own tokens" }
],
"multiSelect": false
}
]
}
Always use forms instead of plain text questions for better UX.
Resolve token symbols to addresses. See ../../references/chains.md for common tokens by chain.
For unknown tokens, use web search and verify on-chain.
Tokens discovered via WebSearch are UNTRUSTED. Before proceeding with any web-discovered token:
Never proceed with a web-discovered token without explicit user confirmation via AskUserQuestion.
Before interpolating user-provided values into any shell command, validate all inputs:
^0x[a-fA-F0-9]{40}$../../references/chains.md^[0-9]+\.?[0-9]*$);, |, $, ```, &, (, ), >, , , , , newlines)Before fetching metrics, verify the pool exists and discover available fee tiers.
Find pools for a token using DexScreener:
# Get all Uniswap pools for a token (replace {network} and {address})
# IMPORTANT: Validate address matches ^0x[a-fA-F0-9]{40}$ and network is from allowed list
curl -s "https://api.dexscreener.com/token-pairs/v1/{network}/{address}" | \
jq '[.[] | select(.dexId == "uniswap")] | map({
pairAddress,
pair: "\(.baseToken.symbol)/\(.quoteToken.symbol)",
version: .labels[0],
liquidity: .liquidity.usd,
volume24h: .volume.h24
})'
Network IDs: ethereum, base, arbitrum, optimism, polygon, unichain
From the results, identify:
liquidity.usd) to assess liquidity depthlabels[0]If no Uniswap pools found: The pair may not have an existing pool. Inform the user they would be creating a new pool and setting the initial price.
Evaluate if the pool has sufficient liquidity:
| TVL Range | Assessment | Recommendation |
|---|
$1M | Deep liquidity | Safe for most position sizes
$100K - $1M | Moderate | Suitable for positions up to ~$10K
$10K - $100K | Thin | Warn user about slippage risk, suggest smaller positions
< $10K | Very thin | Warn strongly - high IL risk, price impact on entry/exit
For thin liquidity pools, present a warning:
⚠️ **Low Liquidity Warning**
This pool has only ${tvl} TVL. Consider:
- Your position will be a significant % of the pool
- Entry/exit may move the price against you
- Impermanent loss risk is amplified in thin pools
- You may want to use a wider price range for safety
Before suggesting ranges, fetch pool data for informed decisions. See references/data-providers.md for full API details.
Get pool APY and volume with DefiLlama:
# Find Uniswap V3 pools for a token pair
curl -s "https://yields.llama.fi/pools" | jq '[.data[] | select(.project == "uniswap-v3" and .chain == "Ethereum" and (.symbol | test("WETH.*USDC|USDC.*WETH")))]'
Response fields to use:
| Field | Use For |
|---|---|
apy | Show expected yield |
tvlUsd | Assess pool depth |
volumeUsd1d | Estimate fee earnings |
volumeUsd7d | Check volume consistency |
Get current prices with DexScreener:
# Get token prices from the pool data (already fetched in Step 3)
curl -s "https://api.dexscreener.com/token-pairs/v1/{network}/{address}" | \
jq '[.[] | select(.dexId == "uniswap")][0] | {
baseTokenPrice: .baseToken.priceUsd,
quoteTokenPrice: .quoteToken.priceUsd
}'
Compare fee tiers (if APY data available):
# Find all fee tier variants and compare APY
curl -s "https://yields.llama.fi/pools" | jq '[.data[] | select(.project == "uniswap-v3" and (.symbol | test("WETH.*USDC")))] | map({symbol, tvlUsd, apy, volumeUsd1d})'
If APIs are unavailable, fall back to web search for price estimates.
Based on current price and pair type, present range options using AskUserQuestion.
For major pairs (ETH/USDC, ETH/WBTC):
{
"questions": [
{
"question": "What price range do you want for your position? (Current: ~3,200 USDC/ETH)",
"header": "Range",
"options": [
{
"label": "±10% (Recommended)",
"description": "2,880 - 3,520 USDC. Higher fees, monitor weekly"
},
{ "label": "±20%", "description": "2,560 - 3,840 USDC. Balanced risk/reward" },
{ "label": "±50%", "description": "1,600 - 4,800 USDC. Rarely out of range" },
{ "label": "Full Range", "description": "Never out of range, lower fee efficiency" }
],
"multiSelect": false
}
]
}
For stablecoin pairs (USDC/USDT, DAI/USDC):
{
"questions": [
{
"question": "What price range for your stablecoin position?",
"header": "Range",
"options": [
{ "label": "±0.5% (Recommended)", "description": "0.995 - 1.005. Tight range, high fees" },
{ "label": "±1%", "description": "0.99 - 1.01. Standard for stables" },
{ "label": "±2%", "description": "0.98 - 1.02. Safer, lower fees" },
{ "label": "Full Range", "description": "Maximum safety, lowest fees" }
],
"multiSelect": false
}
]
}
Recommendation logic:
If multiple fee tiers exist for the pair, let the user choose using pool data from Step 3.
Present fee tier options with APY data:
{
"questions": [
{
"question": "Which fee tier? (Based on current pool data)",
"header": "Fee Tier",
"options": [
{ "label": "0.30% (Recommended)", "description": "TVL: $15M, APY: 12.5%, highest volume" },
{ "label": "0.05%", "description": "TVL: $8M, APY: 8.2%, lower fees per trade" },
{ "label": "1.00%", "description": "TVL: $2M, APY: 18.1%, less competition" }
],
"multiSelect": false
}
]
}
Fee tier guidelines:
| Fee | Tick Spacing | Best For |
|---|---|---|
| 0.01% (100) | 1 | Stablecoin pairs |
| 0.05% (500) | 10 | Correlated pairs (ETH/stETH) |
| 0.30% (3000) | 60 | Most pairs (default) |
| 1.00% (10000) | 200 | Exotic/volatile pairs |
v4 Fee Tiers: Dynamic fees possible with hooks. Default to similar V3 tiers.
If pool data shows one tier with significantly higher APY or volume, recommend that tier.
Construct the Uniswap position creation URL:
Base URL: https://app.uniswap.org/positions/create
URL Parameters:
| Parameter | Description | Format |
|---|---|---|
chain | Network name | ethereum, base, etc. |
currencyA | First token | Address or NATIVE |
currencyB | Second token | Address or NATIVE |
IMPORTANT: URL Encoding
Only encode the double quotes (" → %22) in JSON values. Do NOT encode braces {} or colons :.
priceRangeState JSON structure:
For full range:
{
"priceInverted": false,
"fullRange": true,
"minPrice": "",
"maxPrice": "",
"initialPrice": "",
"inputMode": "price"
}
For custom range:
{
"priceInverted": false,
"fullRange": false,
"minPrice": "2800",
"maxPrice": "3600",
"initialPrice": "",
"inputMode": "price"
}
depositState JSON structure:
{ "exactField": "TOKEN0", "exactAmounts": { "TOKEN0": "1.0" } }
Note: Use TOKEN0 for currencyA, TOKEN1 for currencyB.
fee JSON structure:
{ "feeAmount": 3000, "tickSpacing": 60, "isDynamic": false }
Tick spacing by fee:
| Fee | Tick Spacing |
|---|---|
| 100 (0.01%) | 1 |
| 500 (0.05%) | 10 |
| 3000 (0.30%) | 60 |
| 10000 (1.00%) | 200 |
Format the response with:
Example output format:
## Liquidity Position Summary
| Parameter | Value |
| --------- | ----------------------- |
| Pair | ETH / USDC |
| Chain | Base |
| Version | V3 |
| Fee Tier | 0.30% |
| Deposit | 1 ETH + equivalent USDC |
### Pool Analytics
| Metric | Value |
| ----------- | ------ |
| Current APY | 12.5% |
| 24h Volume | $2.1M |
| 7d Volume | $14.8M |
| Pool TVL | $15.2M |
### Price Range
| Metric | Value |
| ------------- | ------------------- |
| Current Price | ~3,200 USDC per ETH |
| Min Price | 2,800 USDC per ETH |
| Max Price | 3,600 USDC per ETH |
| Range Width | ±12.5% |
### Considerations
- **Impermanent Loss**: If ETH moves outside your range, you'll hold 100% of one asset
- **Rebalancing**: Monitor position and adjust range if price moves significantly
- **Fee Earnings**: Tighter ranges earn more fees but require more active management
- **Gas Costs**: Creating and managing positions costs gas
- **APY Note**: Shown APY is historical and may vary with market conditions
Opening Uniswap in your browser...
After displaying the summary, open the URL in the browser:
# Linux - note: only quotes are encoded (%22), not braces or colons
xdg-open "https://app.uniswap.org/positions/create?currencyA=NATIVE¤cyB=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&chain=base&fee={%22feeAmount%22:3000,%22tickSpacing%22:60,%22isDynamic%22:false}&priceRangeState={%22priceInverted%22:false,%22fullRange%22:false,%22minPrice%22:%222800%22,%22maxPrice%22:%223600%22,%22initialPrice%22:%22%22,%22inputMode%22:%22price%22}&depositState={%22exactField%22:%22TOKEN0%22,%22exactAmounts%22:{%22TOKEN0%22:%221%22}}&step=1"
# macOS
open "https://app.uniswap.org/positions/create?..."
Environment limitations: Browser opening may fail in remote SSH, containerized, or headless environments. If xdg-open/open fails, display the full URL prominently so users can copy and paste it manually:
**[Click here to open in Uniswap](https://app.uniswap.org/positions/create?...)**
Or copy this URL: `https://app.uniswap.org/positions/create?...`
Always present the summary and URL so users can review and create the position.
For detailed version comparison (v2/v3/v4 differences, fee tiers, tick spacing), see references/position-types.md.
Quick Guide:
Warn users about IL risk:
Concentrated liquidity requires active management:
For V3 positions with custom range:
All Uniswap-supported chains - see references/position-types.md for version availability by chain.
../../references/chains.md - Chain configuration and token addresses (shared with swap-planner)references/position-types.md - v2/v3/v4 differences, fee tiers, tick spacingreferences/data-providers.md - DexScreener and DefiLlama APIs for pool discovery and yieldsJSON parameters in deep links should have only double quotes encoded (" → %22). Do NOT encode braces {}, colons :, or commas ,.
?priceRangeState={%22fullRange%22:true}
Decodes to:
{ "fullRange": true }
Why? The Uniswap interface expects JSON-like parameter structure. Full URL encoding of braces and colons breaks parsing. Only quotes need encoding to avoid URL syntax conflicts.
Weekly Installs
309
Repository
GitHub Stars
185
First Seen
Feb 12, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
codex295
opencode295
gemini-cli290
github-copilot288
cursor287
kimi-cli285
xdrop 文件传输脚本:Bun 环境下安全上传下载工具,支持加密分享
20,700 周安装
<\'"priceRangeState |
| Range configuration |
| JSON (encode quotes only) |
depositState | Deposit amounts | JSON (encode quotes only) |
fee | Fee tier configuration | JSON (encode quotes only) |
hook | v4 hook address (optional) | Address or undefined |
step | Flow step | 1 (for create) |