aero-vote-radar

aero-vote-radar

An MCP server + CLI that reads live on-chain data from Aerodrome Finance (Base) to rank pools by veAERO vote efficiency, and recommends a vote allocation that accounts for self-dilution.

Category
访问服务器

README

aero-vote-radar

CI License: MIT

An MCP server + CLI that reads live on-chain data from Aerodrome Finance (Base) to rank pools by veAERO vote efficiency, and recommends a vote allocation that accounts for self-dilution — the fact that adding more of your own votes to a pool measurably lowers your own $-per-vote there, which naive "just vote where APR looks highest" approaches ignore.

No API keys, no backend, no database. Every number comes from Aerodrome's own official on-chain "Sugar" contracts and the Voter contract, read live off Base mainnet, plus DefiLlama's free price API to convert bribe/fee tokens to USD.

This tool never touches a wallet or private key. It outputs a recommendation — weights and expected USD — and you vote it yourself on aerodrome.finance.

Why

Aerodrome pools receive weekly bribes + trading fees, split pro-rata among everyone who voted for that pool with their veAERO. Two things make "just vote for the highest-APR pool" a bad strategy:

  1. Self-dilution. The moment you add votes to a pool, you've changed its vote total, and your own share (and everyone else's) goes down. A pool that looks great before your vote can look mediocre after it, especially if you have a large veAERO balance relative to the pool's existing votes.
  2. Lag. The leaderboard everyone looks at is last epoch's result. Pools where incentives are trending up faster than votes have caught up are where the actual opportunity is — by the time it's obvious, the vote weight has already caught up too.

aero-vote-radar addresses both: it ranks pools using a trailing-average trend estimate instead of just the latest epoch, and it allocates using a greedy marginal-value algorithm that models dilution explicitly.

How it works

Data Source Contract (Base mainnet)
Which pools can receive votes, which gauges are alive Voter 0x16613524e02ad97eDfeF371bC883F2F5d6C480A5
Pool token/symbol metadata the pool contracts themselves (ERC20-like) (per-pool)
Weekly epoch history — votes, bribes, fees RewardsSugar 0x1b121EfDaF4ABb8785a315C51D29BCE0552A7678
Your veAERO locks & voting power VeSugar 0x4d6A741cEE6A8cC5632B2d948C050303F6246D24
USD pricing for bribe/fee tokens DefiLlama coins.llama.fi (free, keyless) —

All addresses are pulled from Aerodrome/Velodrome's own official Sugar deployment file and cross-checked against verified contract names on Basescan.

Two things worth calling out honestly, so the tool isn't oversold:

  • "Predicted" is a trailing average, not machine learning. predictedValuePerVote = mean(last 6 epochs' USD value) ÷ current votes. It's a simple, transparent heuristic for "which pools are trending," not a forecast model.
  • The allocator assumes other voters' votes stay put. The greedy marginal algorithm optimizes your allocation against the current snapshot of everyone else's votes. It doesn't (and can't) predict how other voters will react to your vote.
  • Voter.pools() currently lists ~1,830 pools that have ever had a gauge; ~110–220 pass a minimum trailing-value floor (pools below ~$10/epoch trailing value are excluded — at that size a single small one-off bribe swings the "edge" percentage wildly without being a meaningful signal). A few hundred Voter-registered entries fail basic ERC20 calls (non-standard/likely cross-chain relay entries) and are skipped with a warning rather than failing the whole run.

Install

git clone https://github.com/<you>/aero-vote-radar
cd aero-vote-radar
npm install
npm run build

Optionally set your own Base RPC for a much higher rate-limit ceiling than the shared public endpoints:

export BASE_RPC_URL="https://your-rpc-provider.example/..."

CLI usage

npx tsx src/cli.ts pools --top 10
npx tsx src/cli.ts recommend --veaero 25000
npx tsx src/cli.ts my-veaero 0xYourAddress

Real output from a live run (Base mainnet, no mocking):

$ npx tsx src/cli.ts pools --top 5

Top 5 Aerodrome pools by predicted $/veAERO vote (of 110 live-gauge pools with votes):

Symbol            Votes(veAERO)     Latest $/vote     Predicted $/vote  Edge
vAMM-USDC/SQD     11,724            $0.000655         $0.04             5445.3%
vAMM-FLOCK/VVV    5,626             $0.004693         $0.01             154.7%
vAMM-OVN/USD+     52,409            $0.000558         $0.009986         1688.5%
sAMM-msUSD/frxUSD 42,516            $0.002617         $0.009684         270.1%
sAMM-BOLD/USDC    1,112             $0.003981         $0.009008         126.3%
$ npx tsx src/cli.ts recommend --veaero 25000

Recommended allocation for 25,000 veAERO (top 15 candidates considered):

Symbol            Weight            veAERO            Expected $/epoch
vAMM-USDC/SQD     53.0%             13,250            $225.97
vAMM-OVN/USD+     24.5%             6,125             $54.76
sAMM-msUSD/frxUSD 17.0%             4,250             $37.42
vAMM-FLOCK/VVV    5.0%              1,250             $12.23
sAMM-BOLD/USDC    0.5%              125               $1.01

Total expected value next epoch (heuristic, trailing-average based): $331.38
You vote this yourself on aerodrome.finance — this tool never touches your wallet or keys.
$ npx tsx src/cli.ts my-veaero 0x28aa4F9ffe21365473B64C161b566C3CdeAD0108

veAERO locks for 0x28aa4F9ffe21365473B64C161b566C3CdeAD0108:

  NFT #6: 11,362,738.622 veAERO voting power, expires never (permanent lock)
  NFT #17324: 107,871.726 veAERO voting power, expires never (permanent lock)

Total voting power: 11,470,610.348 veAERO

As an MCP server

npx tsx src/mcp-server.ts

or, after npm run build and npm link / publishing, point any MCP-capable agent (Claude, etc.) at the aero-vote-radar-mcp binary. It exposes three tools:

  • list_pool_efficiency — ranked pools with current + predicted $/vote and predictive edge.
  • recommend_allocation — given a veAERO amount, returns weights + expected USD per pool.
  • get_my_veaero — looks up an account's veAERO locks and total voting power.

Example agent prompt: "Using aero-vote-radar, recommend an allocation for my 25,000 veAERO."

Project layout

src/
  constants.ts     verified Base mainnet contract addresses
  abi.ts           minimal ABIs (only the methods this project calls)
  chain.ts         viem public client (Base RPC, retry/batch configured)
  prices.ts        DefiLlama USD price lookup + cache
  pools.ts         pool discovery (Voter) + epoch history (RewardsSugar)
  efficiency.ts    current & trend-predicted $/vote ranking
  allocator.ts     greedy marginal ("water-filling") allocation algorithm
  veAero.ts        VeSugar wrapper for a user's voting power
  mcp-server.ts    MCP stdio server entrypoint
  cli.ts           CLI entrypoint
test/
  allocator.test.ts  unit tests for the greedy marginal-allocation algorithm

Testing

npm test

Tests cover the allocator (recommendAllocation) with synthetic pool data — budget conservation, that a single candidate gets 100% of the allocation, that topK is actually respected, and specifically that self-dilution works: two pools with identical incentives and existing votes get split roughly evenly under a large budget instead of an APR-only optimizer dumping everything into one. The on-chain data-fetching code (pools.ts, efficiency.ts, veAero.ts) is exercised live against Base mainnet via the CLI rather than mocked — see the real example output above.

CI (.github/workflows/ci.yml) runs the typecheck, build, and test suite on every push.

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选