Read-only Uniswap v4 LP manager data: position history, fees, operators, best pool. No keys.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Every position of a manager, or one position by salt: when it opened, its pool, its lifetime fees and its events. Answered from the index, falling back to the Envelop history API and then to a log scan; the answer says which one served it and how current that source is.
EVM chain id, e.g. 42161 for Arbitrum One
Manager NFT contract address
Position key
Tool list last changed Oct 25, 2026.
Every position of a manager, or one position by salt: when it opened, its pool, its lifetime fees and its events. Answered from the index, falling back to the Envelop history API and then to a log scan; the answer says which one served it and how current that source is.
| Argument | Type | Description |
|---|---|---|
| salt | string | Position key |
| chainId* | integer | EVM chain id, e.g. 42161 for Arbitrum One |
| manager* | string | Manager NFT contract address |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chainId",
"manager"
],
"properties": {
"salt": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$",
"description": "Position key"
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "EVM chain id, e.g. 42161 for Arbitrum One",
"exclusiveMinimum": 0
},
"manager": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Manager NFT contract address"
}
}
}What things are worth on a chain: token USD prices (the Uniswap gateway's map; the native token, address zero, priced as the chain's WETH), the gas price, and the typical USD cost of each operator operation at it (recenter, move, allocate, reinvest, claim). For weighing whether an operation pays before simulating it — a simulation's own gas estimate is better once there is one. `tokens` narrows the map and lists the ones it cannot price; `stale` marks a copy served while a refresh fails.
| Argument | Type | Description |
|---|---|---|
| tokens | array | Token addresses to price; all known when omitted |
| chainId* | integer | EVM chain id, e.g. 42161 for Arbitrum One |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chainId"
],
"properties": {
"tokens": {
"type": "array",
"items": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"maxItems": 50,
"description": "Token addresses to price; all known when omitted"
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "EVM chain id, e.g. 42161 for Arbitrum One",
"exclusiveMinimum": 0
}
}
}Addresses currently authorised to rebalance a manager's positions. They can never withdraw — that is enforced by the contract. On the scan path the answer may be `partial`, which means a revoked operator could still be listed; from the index it never is.
| Argument | Type | Description |
|---|---|---|
| chainId* | integer | EVM chain id, e.g. 42161 for Arbitrum One |
| manager* | string | Manager NFT contract address |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chainId",
"manager"
],
"properties": {
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "EVM chain id, e.g. 42161 for Arbitrum One",
"exclusiveMinimum": 0
},
"manager": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Manager NFT contract address"
}
}
}Fee APR over the last 24 hours for each pool this manager is configured with, best first — the Uniswap gateway's figure, or the subgraph's last complete day for a pool the gateway does not list (`aprSource`). Only the manager's own pools are candidates: a move can target a pool only if the owner fixed it into the set when the manager was created. Pools that could not be scored are listed separately with the reason — a pool missing from the ranking is not a bad pool.
| Argument | Type | Description |
|---|---|---|
| chainId* | integer | EVM chain id, e.g. 42161 for Arbitrum One |
| manager* | string | Manager NFT contract address |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chainId",
"manager"
],
"properties": {
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "EVM chain id, e.g. 42161 for Arbitrum One",
"exclusiveMinimum": 0
},
"manager": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Manager NFT contract address"
}
}
}Compares the position's current pool against the rest of the manager's set and, when the gap is worth it, returns the numbers for a move: destination pool, ticks, and how much liquidity. A pool sharing no currency with the position is suggested only when the manager (v2.2) can bridge to it through another of its own pools; the answer then names that bridge. It returns NUMBERS, never calldata — pass them to the local envelop-mcp-lp server's propose_move, which re-derives each one against chain state and puts it through the policy and the price-oracle guard before anything is signed. The full ranking and the caveats come back with every answer so the suggestion can be disagreed with.
| Argument | Type | Description |
|---|---|---|
| salt* | string | Position key |
| chainId* | integer | EVM chain id, e.g. 42161 for Arbitrum One |
| manager* | string | Manager NFT contract address |
| minGainPct | number | Minimum APR advantage, in percentage points, before moving is suggested. Default 1. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"chainId",
"manager",
"salt"
],
"properties": {
"salt": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$",
"description": "Position key"
},
"chainId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "EVM chain id, e.g. 42161 for Arbitrum One",
"exclusiveMinimum": 0
},
"manager": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$",
"description": "Manager NFT contract address"
},
"minGainPct": {
"type": "number",
"minimum": 0,
"description": "Minimum APR advantage, in percentage points, before moving is suggested. Default 1."
}
}
}