LPSignal

Uniswap/PancakeSwap/Aerodrome LP pools and price ranges ranked by net APR after impermanent loss

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
87%
Naming quality
91%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,547Tokens (tool definitions)
~1.3 KBTypical response size
Moderate attention impact (1.21% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "lpsignal": {
      "url": "https://api.lpsignal.app/v1/mcp"
    }
  }
}

Remote endpoints

https://api.lpsignal.app/v1/mcpstreamable-http
https://api.lpsignal.app/v1/mcp/publicstreamable-http

What it can do

Tool inventory

Tools (7)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒list_pools(chain, class, window, sort, order, ...)

Active pools ranked by the net APR (fees βˆ’ impermanent loss) of their best price range over a window (default 7 days), with that range's ticks, TVL, 24h volume and the pool-level fee APR DEX sites show. Filter by chain and pool class.

Input Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "enum": [
        "ethereum",
        "bsc",
        "base",
        "arbitrum",
        "optimism",
        "polygon",
        "robinhood"
      ]
    },
    "class": {
      "type": "string",
      "enum": [
        "stable",
        "correlated",
        "volatile"
      ],
      "description": "stable = stablecoin pairs, correlated = e.g. ETH/stETH, volatile = everything else"
    },
    "window": {
      "type": "integer",
      "enum": [
        1,
        24,
        168,
        720
      ],
      "description": "backtest window in hours (default 168 = 7 days)"
    },
    "sort": {
      "type": "string",
      "enum": [
        "netApr",
        "feeApr",
        "ilApr",
        "inRange",
        "tvl",
        "volume24h",
        "fees24h",
        "poolApr"
      ],
      "description": "default netApr"
    },
    "order": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ]
    },
    "minTvlUsd": {
      "type": "number",
      "description": "default 10000"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "default 10"
    },
    "offset": {
      "type": "integer",
      "minimum": 0
    }
  },
  "required": [],
  "additionalProperties": false
}
🟒find_pair_pools(tokenA, tokenB, chain)

Every listed pool of a token pair across chains, DEXes and fee tiers (TVL β‰₯ $10k), each with its best range by 7-day net APR, best first β€” a small pool can rank first, so weigh tvlUsd. Symbols are matched case-insensitively, in either order.

Input Schema

{
  "type": "object",
  "properties": {
    "tokenA": {
      "type": "string",
      "description": "e.g. USDC"
    },
    "tokenB": {
      "type": "string",
      "description": "e.g. WETH"
    },
    "chain": {
      "type": "string",
      "enum": [
        "ethereum",
        "bsc",
        "base",
        "arbitrum",
        "optimism",
        "polygon",
        "robinhood"
      ]
    }
  },
  "required": [
    "tokenA",
    "tokenB"
  ],
  "additionalProperties": false
}
🟒get_pool(chain, address)

A pool's details and its backtest of every range it is evaluated on (fee APR, impermanent loss, net APR, time in range, the exact ticks) over 1 hour, 24 hours, 7 days and 30 days.

Input Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "enum": [
        "ethereum",
        "bsc",
        "base",
        "arbitrum",
        "optimism",
        "polygon",
        "robinhood"
      ]
    },
    "address": {
      "type": "string",
      "description": "pool contract address (0x + 40 hex), or a Uniswap v4 pool id (0x + 64 hex)"
    }
  },
  "required": [
    "chain",
    "address"
  ],
  "additionalProperties": false
}
🟒backtest_range(chain, address, rangePct, days)

Backtest a symmetric range of Β±rangePct% around the price at the window's start (0 = full range) on a pool over the last `days` days: fee APR, impermanent loss, net APR, time in range, the ticks.

Input Schema

{
  "type": "object",
  "properties": {
    "chain": {
      "type": "string",
      "enum": [
        "ethereum",
        "bsc",
        "base",
        "arbitrum",
        "optimism",
        "polygon",
        "robinhood"
      ]
    },
    "address": {
      "type": "string",
      "description": "pool contract address (0x + 40 hex), or a Uniswap v4 pool id (0x + 64 hex)"
    },
    "rangePct": {
      "type": "number",
      "minimum": 0,
      "maximum": 50,
      "description": "half-width in percent; 0 = full range"
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 30,
      "description": "default 7"
    }
  },
  "required": [
    "chain",
    "address",
    "rangePct"
  ],
  "additionalProperties": false
}
🟒list_signals(kinds, source, limit, before)

The newest signals: opportunities (net_apr: a range paying a high net APR over 7 days and still today; burst: the last hour; hot_pool: a big pool's fee APR jumping) and risk alerts (depeg, tvl_outflow), with the exact ticks and, once scored, the realised outcome. Each says access: live, or delayed_24h (opportunities on a free plan or without sign-in appear 24 hours after they fired). Page back with before.

Input Schema

{
  "type": "object",
  "properties": {
    "kinds": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "net_apr",
          "burst",
          "hot_pool",
          "tvl_outflow",
          "depeg",
          "smart_lp"
        ]
      }
    },
    "source": {
      "type": "string",
      "enum": [
        "default",
        "rules",
        "subscribed"
      ],
      "description": "with a key: rules = your custom-rule matches, subscribed = what your push channels deliver"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "default 10"
    },
    "before": {
      "type": "string",
      "description": "page: signals with an id below this"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟒signal_track_record(kind, days)

How past opportunity signals really did: each is backtested again on its exact ticks after the fact (7 days for net_apr, 24 hours for burst). Counts, share positive, median APR at the signal vs realised, the worst.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "net_apr",
        "burst"
      ],
      "description": "default net_apr"
    },
    "days": {
      "type": "integer",
      "minimum": 7,
      "maximum": 365,
      "description": "signals fired in the last N days (default 30)"
    }
  },
  "required": [],
  "additionalProperties": false
}
🟒smart_lp_leaderboard(windowDays, chain, limit)

Wallets ranked by what their closed LP positions made versus simply holding the tokens. Without a Pro key: the top 10, addresses masked.

Input Schema

{
  "type": "object",
  "properties": {
    "windowDays": {
      "type": "integer",
      "enum": [
        30,
        90
      ]
    },
    "chain": {
      "type": "string",
      "enum": [
        "ethereum",
        "bsc",
        "base",
        "arbitrum",
        "optimism",
        "polygon",
        "robinhood"
      ]
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "default 10"
    }
  },
  "required": [],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools
auth requiredversion not recordedβ€”