Skip to main content
Glama
Hryhorii77

aero-allocator

by Hryhorii77

aero-allocator

MCP-Server, der die Nachfrage der nächsten Epoche für Aerodrome- (Base) oder Velodrome- (Optimism) Pools prognostiziert und daraus konkrete Anreiz-Allokationsempfehlungen ableitet – gebaut für die Ära der Predictive Allocation von Aerodrome (September 2026, verschoben vom ursprünglichen Juli-Ziel), in der Anreize der prognostizierten zukünftigen Nachfrage folgen statt den Abstimmungen der letzten Woche. Aerodrome ist die Standardeinstellung; siehe Multi-Protokoll zum Wechseln.

Jeder MCP-fähige Agent (Claude Code, Claude Desktop, Bankr-gehostete Agenten) kann ihn nutzen, um folgende Fragen zu beantworten:

  • Welche Pools werden in der nächsten Epoche die meisten Gebühren generieren?

  • Wo ist der Abstimmungsanteil falsch bepreist im Vergleich zur prognostizierten Nachfrage (die „Predictive Edge")?

  • Wie sollte ich meine veAERO-Stimmen / mein Anreizbudget jetzt aufteilen?

Alle Daten kommen live von Base – Aerodrome-Sugar-Contracts für den Pool-Zustand und die Historie pro Epoche, DefiLlama für USD-Preise. Keine API-Schlüssel erforderlich.

Tools

Tool

Was es tut

scan_pools

Gauge-fähige Pools mit Live-TVL, gestaketem TVL, Gebührenstufe

pool_history

Stimmen, Emissionen, Gebühren (USD), Bribes (USD) pro Epoche für einen Pool

predict_demand

Gebührenprognose für die nächste Epoche pro Pool + predictiveEdgePct (prognostizierter Nachfrageanteil − aktueller Abstimmungsanteil)

recommend_allocation

Gewichtete Allokation: protocol_efficiency (∝ prognostizierte Nachfrage) oder voter_roi (dilutionsbewusste optimale Aufteilung deiner veAERO)

recommend_bribe_placement

Für Teams/Protokolle, die ein Bribe-Budget ausgeben (nicht Wähler): geschätzter Abstimmungsanteils-Zuwachs pro Pool und wer verwässert wird

recommend_lp_deposit

Für LPs, die entscheiden, wo sie Liquidität staken: vorausschauender AERO-Emissions-APR pro Pool (nicht Gebühreneinnahmen – siehe unten)

prepare_vote_calldata

Unsignierte Voter.vote()-Calldata aus einer Allokation – über deine eigene Wallet-Schicht einreichen (z. B. Base MCP send_calls)

prepare_submission

Unsignierte Calldata für die direkte Predictive-Allocation-Einreichung, sobald angebunden – siehe Predictive-Allocation-Adapter

predictive_allocation_status

Ob die direkte Predictive-Allocation-Einreichung bereits angebunden ist

backtest_summary

Walk-Forward-Genauigkeit der Nachfrageprognose im Vergleich zu realisierten Gebühren und einer naiven Baseline – siehe Prognosegenauigkeit

Dieser Server hält niemals Schlüssel und signiert nichts. Die Ausführung ist Aufgabe des Host-Agenten, hinter expliziter Benutzerfreigabe.

Related MCP server: aero-vote-radar

Schnellstart

npm install
npm run smoke        # live end-to-end test against Base mainnet
npm run build

Multi-Protokoll (Aerodrome / Velodrome)

Aerodrome (Base) und Velodrome (Optimism) stammen aus derselben ve(3,3)-Linie – Aerodrome ist ein Velodrome-Fork, der das Sugar/Voter-Contract-Muster teilt –, sodass eine Engine beide abdeckt. Ein einzelner Serverprozess bedient ein Protokoll, das beim Start ausgewählt wird:

{
  "mcpServers": {
    "aero-allocator": {
      "command": "npx",
      "args": ["tsx", "/path/to/aero-allocator/src/index.ts"],
      "env": { "AERO_PROTOCOL": "aerodrome" }
    },
    "velo-allocator": {
      "command": "npx",
      "args": ["tsx", "/path/to/aero-allocator/src/index.ts"],
      "env": { "AERO_PROTOCOL": "velodrome" }
    }
  }
}

AERO_PROTOCOL standardmäßig auf aerodrome (unverändertes Verhalten, wenn nicht gesetzt). Beide Einträge registrieren, um sie nebeneinander zu betreiben – jeder ist ein separater Prozess mit eigenem RPC-Client und eigenen Caches. Tool-Beschreibungen, ve-Token-Benennung (veAERO/veVELO) und Reward-Token-Benennung (AERO/VELO) wechseln automatisch mit dem konfigurierten Protokoll; predictive_allocation_status meldet korrekt, dass der Mechanismus bei Velodrome nicht anwendbar ist, da die Ankündigung von Dromos Labs Aerodrome-spezifisch ist.

RPC-Auswahl: RPC_URL (neu, funktioniert für beide Protokolle) gewinnt immer, wenn gesetzt; andernfalls wird BASE_RPC_URL aus Gründen der Abwärtskompatibilität berücksichtigt, wenn Aerodrome läuft; andernfalls fällt jedes Protokoll auf einen öffentlichen Standard zurück (base-rpc.publicnode.com / mainnet.optimism.io).

Dashboard

Eine „Predicted Hot Pools"-Web-UI befindet sich in web/ (Next.js, nutzt die Engine direkt) – derzeit nur Aerodrome/Base:

npm run build                 # engine dist/ used by the web app
cd web && npm install && npm run dev

Öffne http://localhost:3000 – Hot-Pools-Tabelle (prognostizierte Gebühren, Edge, Konfidenz), plus interaktive Voter-ROI- (veAERO eingeben) und Protocol-Efficiency-Allokationspanels. Der erste Aufruf erstellt den Onchain-Snapshot (~1 Min.), danach wird gecacht.

Verbinde eine Wallet (injiziert oder Coinbase Wallet, Base-Chain), um die Voter-ROI-Allokation als echte Abstimmung abzugeben: Deine veAERO-NFTs werden automatisch über VeSugar erkannt (manuelle ID-Eingabe als Fallback) und der „Cast Vote"-Button sendet Voter.vote() mit den empfohlenen Gewichten – du signierst in deiner Wallet; die App hält niemals Schlüssel.

Bei Claude Code registrieren:

claude mcp add aero-allocator -- npx tsx /path/to/aero-allocator/src/index.ts

Oder in einer beliebigen MCP-Client-Konfiguration:

{
  "mcpServers": {
    "aero-allocator": {
      "command": "npx",
      "args": ["tsx", "/path/to/aero-allocator/src/index.ts"],
      "env": { "BASE_RPC_URL": "https://mainnet.base.org" }
    }
  }
}

Beispiel-Agentenablauf:

„Prognostiziere die Nachfrage für die Top-Aerodrome-Pools, empfehle eine voter_roi-Allokation über 8 Pools, bereite dann die Vote-Calldata für meine veAERO #12345 vor und reiche sie mit meiner Base-Wallet ein."

So funktioniert die Prognose

Für jeden Kandidatenpool (Top N nach gestaketem TVL über einer TVL-Untergrenze):

  1. Bis zu 8 wöchentliche Epochen Historie von RewardsSugar.epochsByAddress abrufen – Stimmen, Emissionen, Gebühren, Anreize pro Epoche – und alles in USD bepreisen.

  2. Die laufende Epoche auf volle Länge extrapolieren, sobald >20 % verstrichen sind (das frischeste Nachfragesignal).

  3. Gebühren der nächsten Epoche prognostizieren = EWMA (α=0,45) + ½ × linearer Trend, bei 0 gedeckelt. Konfidenzwerte aus Historientiefe und Varianz.

  4. predictiveEdge = prognostizierter Gebühren-Nachfrageanteil − aktueller Abstimmungsanteil. Positive Edge → unterinzentivierter Pool: genau das, was ein Prediction-Market-Allokator belohnen sollte.

Zwei Allokationsziele:

  • protocol_efficiency – Gewichte ∝ prognostizierter Nachfrageanteil. Das ist das Predictive-Allocation-Ideal; nützlich für Treasuries/Protokolle, die Anreize lenken, und zum Benchmarking des Live-Mechanismus, sobald er ausgeliefert ist.

  • voter_roi – Maximierung deiner erwarteten Belohnung der nächsten Epoche für einen gegebenen veAERO-Betrag (votingPowerVe). Jeder Pool zahlt anteilig (R·v/(E+v)), also water-fillt der Optimierer die Stimmen, um die Grenzerträge anzugleichen – Staubpools mit hohem Headline-ROI, aber ohne Belohnungskapazität erhalten natürlich wenige oder keine Stimmen (plus eine harte $500-Kapazitätsuntergrenze). Die Ausgabe enthält die erwartete USD-Belohnung pro Pool nach Selbstverwässerung.

recommend_bribe_placement dreht dies für Teams/Protokolle um, die ein Bribe-Budget statt Stimmen ausgeben: Es führt denselben Water-Fill über die gesamte aktive Abstimmungsmacht des Marktes erneut aus, mit und ohne den Bribe, der zur Auszahlung eines Pools hinzugefügt wird, und meldet die Delta des Abstimmungsanteils. Stimmen water-fillen ∝ √Auszahlung, sodass ein Bribe-Dollar auf einem billigen Pool überproportional mehr zieht als auf einem bereits großen. Dies modelliert eine sofortige, reibungslose, marktweite Neuallokation, ist also eine theoretische Obergrenze, keine Prognose – nützlich zum Vergleichen von Kandidatenpools, nicht zur Vorhersage einer wörtlichen Stimmenzahl.

recommend_lp_deposit zielt auf ein drittes Publikum – LPs, die entscheiden, wo sie Liquidität einzahlen und staken – und rankt bewusst nicht nach predictedFeesUsd. Auf Aerodrome fließen Handelsgebühren (und Bribes) an veAERO-Wähler, nicht an Liquiditäts-Staker; Staker verdienen stattdessen AERO-Emissionen anteilig zum gestaketen TVL. Dieses Tool prognostiziert daher die Emissionen der nächsten Epoche aus der Emissionshistorie jedes Pools mit demselben EWMA+Trend-Modell, das predict_demand für Gebühren verwendet, und annualisiert das Ergebnis gegen das aktuelle gestakete TVL als predictedNextEpochAprPct. Es meldet auch currentEpochAprPct, das gar keine Prognose benötigt – die Emissionsrate der laufenden Epoche wurde bereits durch die Stimmen festgelegt, die vor ihrem Beginn abgegeben wurden, also wird sie direkt gelesen statt prognostiziert.

Prognosegenauigkeit

confidence für jede Prognose beginnt als Heuristik (Historientiefe + Varianz) und wird dann gegen die reale Backtest-Genauigkeit neu kalibriert, bevor sie eine Tool-Ausgabe erreicht – siehe Konfidenz- Kalibrierung unten. backtest_summary (Tool) und npm run backtest (Skript) legen die vollständige Validierung offen.

Methodik: Walk-Forward durch die abgeschlossene Epochenhistorie jedes Pools. An jeder historischen Epochengrenze wird diese Epoche nur mit den Epochen prognostiziert, die tatsächlich vorher verfügbar gewesen wären (begrenzt auf dasselbe nachlaufende Fenster, das predict_demand verwendet – der Backtest gibt dem Modell nie mehr Historie, als es live bekommt), und dann mit dem verglichen, was tatsächlich passiert ist. Fehler werden als MAE, RMSE und WAPE (Σ|Fehler| / ΣIst), robust gegenüber den nahezu-Null-Gebühren-Epochen, an denen MAPE scheitert, zusammen mit Skill vs. Baseline gemeldet – derselbe Vergleich gegen ein naives „nächste Epoche = letzte Epoche"-Modell, sodass eine negative Skill-Zahl bedeutet, dass die EWMA+Trend-Prognose ihre Komplexität gegenüber dem Nichtstun nicht rechtfertigt. Eine Konfidenz-Kalibrierungstabelle prüft, ob Prognosen mit höherer Konfidenz tatsächlich einen geringeren Fehler aufweisen. Eine bekannte Lücke: Dies spielt nur Epochengrenzen-Prognosen nach – es spielt nicht die Mitte-der-Epoche-Pace-Extrapolationsmischung nach, die für die laufende Live-Epoche verwendet wird.

Konfidenz-Kalibrierung

Die heuristische Konfidenz (depthScore × stabilityScore) ist eine Schätzung, wie vertrauenswürdig eine Prognose ist – sie hat nie ein reales Ergebnis gesehen. deriveConfidenceCalibration bucketed jeden Walk-Forward-Backtestpunkt nach seiner rohen heuristischen Konfidenz, berechnet den tatsächlich realisierten WAPE innerhalb jedes Buckets und konvertiert das in calibratedConfidence = 1/(1+wape) (dieselbe funktionale Form, die die Heuristik bereits für ihren eigenen Varianzterm verwendet). predict_demand, recommend_allocation und recommend_bribe_placement mappen dann jede Live-Prognose-Konfidenz über diese Kurve via applyConfidenceCalibration – ein Konfidenzbereich, den die Heuristik für solide hielt, der sich in der Praxis aber als verrauscht erwiesen hat, wird also herabgestuft und umgekehrt. Das ist über die Anzeige hinaus wichtig: Konfidenz gewichtet direkt die voter_roi-Belohnungsschätzung und begrenzt die Kandidatenpools von recommend_bribe_placement, sodass ein falsch kalibrierter Score beide still verzerren würde.

Buckets mit weniger als 8 Backtest-Stichproben werden verworfen statt vertraut, und jede Prognose, deren rohe Konfidenz in einen verworfenen (oder noch nicht berechneten) Bereich fällt, behält ihren heuristischen Score – Kalibrierung ist opportunistisch zusätzlich zur immer verfügbaren Heuristik, nie eine harte Abhängigkeit. Wenn in der letzten Stunde kein frisches backtest_summary gelaufen ist, rufen die relevanten Tools eines zusammen mit dem Markt-Snapshot ab (gleichzeitig, sodass es nicht zur Wartezeit beiträgt) und fallen auf die rohe Heuristik zurück, wenn dieser Abruf aus irgendeinem Grund fehlschlägt.

Führe npm run backtest für einen Konsolenbericht aus oder rufe backtest_summary von einem beliebigen verbundenen Agenten für Live-Zahlen auf (gecacht ~1h; AERO_BACKTEST_EPOCHS / AERO_BACKTEST_MAX_POOLS justieren Tiefe/Breite).

Predictive-Allocation-Adapter

Dromos Labs hat den Mechanismus angekündigt, aber noch keine Contracts/ABI veröffentlicht (Stand 2026-08-16; der Start wurde von Juli auf September 2026 verschoben). Alles Mechanismus-Spezifische liegt hinter einem Interface in src/adapters/predictive-allocation.ts und ist vollständig konfigurationsgesteuert – keine Codeänderungen am Starttag nötig, nur Env-Variablen setzen, sobald Dromos die Adresse und ABI veröffentlicht:

Var

Example

AERO_PREDICTIVE_ALLOCATION_ADDRESS

0x...

Die Vertragsadresse des Mechanismus

AERO_PREDICTIVE_ALLOCATION_ABI

["function submitAllocation(uint256 tokenId, address[] pools, uint256[] weights)"]

Lesbare ABI (JSON-Array), einzelne Funktion

AERO_PREDICTIVE_ALLOCATION_FUNCTION

submitAllocation

Name der aufzurufenden Funktion

AERO_PREDICTIVE_ALLOCATION_ARGS

["veNftId","pools","weightsBps"]

Positionale Argumentrollen — unterstützt: veNftId, pools, weightsBps (100 = 1%, entspricht Voter.vote()), weightsWad (Bruchteil von 1e18)

Mit allen vier gesetzt, erstellt prepare_submission echte Calldata; predictive_allocation_status meldet live: true. Bis dahin schlägt prepare_submission mit einer klaren „noch nicht veröffentlicht"-Fehlermeldung fehl und prepare_vote_calldata zielt auf den klassischen Voter.vote()-Ablauf, der heute funktioniert.

Konfiguration (env)

Var

Default

AERO_PROTOCOL

aerodrome

aerodrome (Base) oder velodrome (Optimism) — siehe Multi-protocol

RPC_URL

Protokoll-Standard

Dedizierter RPC, für beide Protokolle — hat immer Vorrang, wenn gesetzt

BASE_RPC_URL

https://base-rpc.publicnode.com

Legacy-Alias für RPC_URL, berücksichtigt, wenn AERO_PROTOCOL=aerodrome

AERO_MIN_TVL_USD

50000

TVL-Untergrenze für Kandidatenpools

AERO_MAX_CANDIDATES

60

Pools, die eine vollständige Epochenverlaufsanalyse erhalten

AERO_BACKTEST_EPOCHS

26

Epochen des Verlaufs, die pro Pool für backtest_summary abgerufen werden

AERO_BACKTEST_MAX_POOLS

30

Pools, die pro Standard-backtest_summary-Lauf analysiert werden

Verwendete Verträge

Beide aus velodrome-finance/sugar's deployments/{base,optimism}.env; Reward-Token-Adressen gegen DefiLlama + CoinGecko gegengeprüft.

Aerodrome (Base, 8453)

Velodrome (Optimism, 10)

LpSugar

0x69dD9db6d8f8E7d83887A704f447b1a584b599A1

0x347512180804A8B40AA7525AE932a31198F074aA

RewardsSugar

0x1b121EfDaF4ABb8785a315C51D29BCE0552A7678

0x62CCFB2496f49A80B0184AD720379B529E9152fB

VeSugar

0x4d6A741cEE6A8cC5632B2d948C050303F6246D24

0xFE0a44d356a9F52c9F1bE0ba0f0877d986438c9C

Voter

0x16613524e02ad97eDfeF371bC883F2F5d6C480A5

0x41C914ee0c7E1A5edCD0295623e6dC557B5aBf3C

Reward-Token (AERO/VELO)

0x940181a94A35A4569E4529A3CDfB74e38FD98631

0x9560e827aF36c94D2Ac33a39bCe1fe78631088dB

Roadmap

  • Predictive-Allocation-Adapter ist konfigurationsgesteuert und startbereit — das Anbinden der echten Verträge ist eine Env-Var-Änderung (prepare_submission)

  • Soziale/Aufmerksamkeitssignale (Farcaster-Erwähnungen, Token-Listings) als Prognosefunktionen

  • Backtest-Harness: vergangene Epochen abspielen, Prognose gegen realisierte Gebühren bewerten, Genauigkeit veröffentlichen (backtest_summary, npm run backtest)

  • x402-monetarisierter gehosteter Endpunkt (Pay-per-Forecast in USDC über Bankr)

  • „Predicted hot pools"-Dashboard (web/)

  • Wallet-Verbindung + Ein-Klick-Abstimmung vom Dashboard (wagmi)

  • Multi-Protokoll: Velodrome (Optimism) neben Aerodrome (Base), ausgewählt über AERO_PROTOCOL

  • Multi-Protokoll-Unterstützung im Dashboard (web/) (derzeit nur Aerodrome/Base)

Haftungsausschluss

Prognosen sind statistische Extrapolationen der Onchain-Historie, keine Finanzberatung. Überprüfen Sie Calldata immer vor dem Signieren.

Available Tools

6 tools
pool_historyA

Per-epoch history for one Aerodrome pool: votes, AERO emissions, trading fees (USD) and bribes/incentives (USD) per weekly epoch, newest first (first row is the in-progress epoch).

ParametersJSON Schema
NameRequiredDescriptionDefault
poolYesPool (lp) address
epochsNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses ordering and the in-progress epoch, but does not mention read-only nature, authentication requirements, or rate limits. For a read-only historical tool, this is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that front-loads the purpose and includes all key details without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient for a simple tool with two parameters and no output schema. It explains what data is returned and ordering, though it could mention that it returns rows or a list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 50% of parameters (pool with description). The description adds context that pool refers to 'one Aerodrome pool', but does not add meaning for the 'epochs' parameter beyond schema constraints. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it provides per-epoch history for one Aerodrome pool, listing specific data types (votes, AERO emissions, trading fees, bribes/incentives) and ordering (newest first). This distinguishes it from sibling tools that focus on predictions, allocation, or scanning.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (when historical pool data is needed) but does not explicitly state when not to use or mention alternatives. However, the context of sibling tools makes the usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

predict_demandA

Forecast next-epoch trading-fee demand for top Aerodrome pools and compare it with current vote allocation. Key output: predictiveEdgePct — pools with positive edge are under-incentivized relative to predicted demand (the signal Predictive Allocation rewards). Data is cached ~5 min.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax pools to return
sortByNopredicted_fees
refreshNoForce a fresh onchain snapshot

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses data caching (~5 min) and mentions the key output field. However, it does not state whether the tool is read-only, permissions needed, or potential side effects. It provides moderate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with precise language. No redundant words. Purpose is stated upfront, followed by key output explanation and caching note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately explains what the tool does and the main output for a 3-parameter tool with no output schema. It could benefit from a brief note on return structure or error conditions, but overall it's sufficient for agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67% (limit and refresh have descriptions, sortBy lacks description but enum values are self-explanatory). The description adds minimal extra parameter meaning beyond schema, mostly contextualizing the output rather than parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Forecast... and compare') and resource ('top Aerodrome pools'). It distinguishes from siblings (pool_history, recommend_allocation, etc.) by specifying it's about next-epoch demand vs current allocation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the key output (predictiveEdgePct) and its interpretation (positive edge = under-incentivized), giving context for when to use. It implicitly suggests this tool for identifying under-incentivized pools, but lacks explicit when-not-to-use or alternative comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

predictive_allocation_statusA

Status of the direct Predictive Allocation submission path (Aerodrome's July 2026 mechanism replacing weekly gauge voting). Reports whether live contracts are wired into this server.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears the full burden. It states the tool reports status (read-only) but does not explicitly confirm it has no side effects or require special permissions. The behavior is implied but not fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded and free of unnecessary words. It efficiently communicates the tool's purpose without redundancy, earning a high score for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, no output schema, no nested objects), the description provides sufficient context. It describes the tool's function and the specific mechanism it belongs to, making it complete for an agent to understand its utility.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and 100% coverage, so the description's role is to explain what information the tool returns. It adds meaning beyond the schema by specifying that it reports whether 'live contracts are wired into this server', which clarifies the output's semantic content.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool reports the status of the direct Predictive Allocation submission path, specifically whether live contracts are wired into the server. It distinguishes from sibling tools (e.g., pool_history, recommend_allocation) by being a status check rather than a data query or action tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance is given. The description implies it should be used to check system connectivity, but it does not specify when this is preferable to alternatives or mention prerequisites. This is acceptable for a simple read-only tool, but could be more helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_vote_calldataA

Build unsigned transaction calldata for Aerodrome Voter.vote() from an allocation (veAERO NFT id + pool weights). Returns { to, data, value } for the host wallet (e.g. Base MCP send/send_calls) to review, sign and submit — this server never signs. Note: votes can only be cast once per epoch per veNFT, and not in the final hour before epoch flip.

ParametersJSON Schema
NameRequiredDescriptionDefault
veNftIdYesveAERO NFT token id that holds the voting power
allocationsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so description bears full burden. It discloses the tool does not sign transactions and returns data for external signing, and notes voting constraints. This adequately discloses behavioral traits beyond basic purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus a note. Front-loads the action and output format, then adds constraints. Every sentence is informative with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers input, output, usage constraints, and the tool's role in a broader signing flow. No output schema exists, but description explains return values. Sibling tool names confirm differentiation. Complete for decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (veNftId has description, allocations does not). Description adds meaning by summarizing parameters as 'veAERO NFT id + pool weights', clarifying the allocation structure. It doesn't detail constraints like maxItems, but the schema covers those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool builds unsigned calldata for a specific function (Aerodrome Voter.vote()), specifying verb, resource, and input. Sibling tools are about prediction and scanning, so this tool's distinct purpose is evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage context for voting calldata preparation, and includes important constraints (once per epoch, not final hour). It does not explicitly contrast with siblings, but the context is clear enough given sibling tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recommend_allocationA

Produce a concrete incentive-allocation recommendation across Aerodrome pools. objective=protocol_efficiency allocates proportional to predicted next-epoch fee demand (the Predictive Allocation ideal); objective=voter_roi maximizes expected reward per veAERO vote with a 25% per-pool concentration cap. Returns weights that sum to 100%.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo
maxPoolsNo
objectiveNovoter_roi

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool returns weights summing to 100% and mentions a 25% concentration cap for voter_roi. However, it does not state whether the tool is read-only, whether it requires authentication, or any side effects. The refresh parameter is not explained, which is a gap for behavioral understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loading the purpose and then detailing the objectives. Every sentence adds value, and there is no redundant or extraneous information. It is optimally concise for the information provided.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters, no annotations, and no output schema, the description is moderately complete. It explains the output (weights summing to 100%), covers the two modes, and mentions the concentration cap. However, it lacks explanation for refresh and maxPools, and does not detail the return format beyond the sum constraint. Additional context on these gaps would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the objective parameter in detail (the two enum values and their behaviors), but does not explain the refresh boolean or maxPools integer parameters. For a 3-parameter tool, covering only one well is partial but the most critical parameter is covered, so a middle score is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool produces concrete incentive-allocation recommendations across Aerodrome pools, and explains the two possible objectives. This distinguishes it from sibling tools like pool_history (historical data) and predict_demand (demand prediction), making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the two objectives (protocol_efficiency and voter_roi) and their behaviors, providing some guidance on which to choose. However, it does not explicitly state when to use this tool over siblings or provide exclusions/alternatives. The guidance is implicit in the objective descriptions but lacks completeness.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_poolsA

Scan Aerodrome (Base) gauge-enabled pools with live TVL, staked TVL, fee tier and emissions. Sorted by staked TVL. Use this for a market overview before predicting demand.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax pools to return
minTvlUsdNoMinimum pool TVL in USD

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavior. It describes the tool as scanning for live data and sorting by staked TVL. It does not explicitly state read-only nature or any side effects, but the verb 'scan' implies a read operation. The description adds value over no description but lacks explicit behavioral guarantees.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long with no wasted words. It front-loads the core action and output fields, then provides usage guidance. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no output schema, the description lists the main return fields (live TVL, staked TVL, fee tier, emissions) and states the sort order. It also mentions the platform (Aerodrome on Base) and ties to sibling tools implicitly. A minor gap is not describing each field in detail, but for a scan tool this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning the input schema already documents parameters (limit, minTvlUsd) with descriptions and defaults. The tool description does not add additional meaning to these parameters beyond what is in the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Scan'), the resource ('Aerodrome (Base) gauge-enabled pools'), and the returned fields (live TVL, staked TVL, fee tier, emissions). It distinguishes itself from siblings by positioning as a market overview tool before predicting demand.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage context: 'Use this for a market overview before predicting demand.' This implies it is a preliminary step to predictive tools like predict_demand. It does not specify when not to use it, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedpool_history
    • First observedpredict_demand
    • First observedpredictive_allocation_status
    • First observedprepare_vote_calldata
    • First observedrecommend_allocation
    • First observedscan_pools

TDQS

A4.2/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct aspect of Aerodrome allocation: history, demand prediction, mechanism status, vote calldata preparation, allocation recommendation, and pool scanning. There is no overlap; descriptions clearly differentiate their purposes.

Naming Consistency4/5

Most tool names follow a clear verb_noun pattern (predict_demand, scan_pools, prepare_vote_calldata, recommend_allocation), but two are noun phrases (pool_history, predictive_allocation_status). The naming style remains consistent with snake_case and descriptive terms.

Tool Count5/5

With 6 tools, the server is well-scoped for its domain. Each tool serves a necessary function in the allocation workflow, neither too few to be incomplete nor too many to be unwieldy.

Completeness5/5

The tool set covers the full lifecycle: scanning for overview, historical data, demand prediction, allocation recommendation, and vote calldata construction. There are no obvious gaps for the intended purpose of optimizing Aero vote allocation.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP (Model Context Protocol) server for the MAIN DEX on Base. Provides AI agents (Claude, Cursor, etc.) with tools to interact with the protocol: swap tokens, manage liquidity, enter/exit ALM strategies(10% APY), and more.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    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.
    10 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server to fetch DeFi yield opportunities on Base chain, including Aerodrome LP and Moonwell lending, with pay-per-call via x402 micropayments.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that provides AI agents with pay-per-call access to a suite of tools (honeypot check, token market, DeFi yields, etc.) via USDC on Base using the x402 protocol.
    4 npm
    MIT