aero-allocator
aero-allocator
Servidor MCP que pronostica la demanda del próximo epoch para pools de Aerodrome (Base) o Velodrome (Optimism) y lo convierte en recomendaciones concretas de asignación de incentivos — construido para la era de Asignación Predictiva de Aerodrome (septiembre de 2026, retrasado desde el objetivo original de julio), donde los incentivos siguen la demanda futura predicha en lugar de los votos de la semana pasada. Aerodrome es el predeterminado; consulta Multi-protocolo para cambiar.
Cualquier agente compatible con MCP (Claude Code, Claude Desktop, agentes alojados en Bankr) puede usarlo para responder:
¿Qué pools generarán más comisiones el próximo epoch?
¿Dónde está el voto mal valorado frente a la demanda predicha (la "ventaja predictiva")?
¿Cómo debería dividir mis votos veAERO / presupuesto de incentivos ahora mismo?
Todos los datos provienen en vivo de Base — contratos Sugar de Aerodrome para el estado de pools e historial por epoch, DefiLlama para precios en USD. No se requieren claves API.
Herramientas
Herramienta | Qué hace |
| Pools con gauge con TVL en vivo, TVL en staking, nivel de comisión |
| Votos por epoch, emisiones, comisiones (USD), sobornos (USD) para un pool |
| Pronóstico de comisiones del próximo epoch + predictiveEdgePct (cuota de demanda predicha − cuota de voto actual) |
| Asignación ponderada: |
| Para equipos/protocolos que gastan un presupuesto de sobornos (no votantes): tracción estimada de cuota de voto por pool, y quién se diluye |
| Para proveedores de liquidez que deciden dónde depositar: APR de emisiones AERO con visión de futuro por pool (no ingresos por comisiones — ver más abajo) |
| Calldata de |
| Calldata sin firmar para el envío directo de Asignación Predictiva, una vez implementado — ver adaptador de Asignación Predictiva |
| Si el envío directo de Asignación Predictiva ya está implementado |
| Precisión walk-forward del pronóstico de demanda frente a comisiones realizadas y una línea base ingenua — ver Precisión del pronóstico |
Este servidor nunca guarda claves ni firma nada. La ejecución es trabajo del agente anfitrión, detrás de la aprobación explícita del usuario.
Related MCP server: aero-vote-radar
Inicio rápido
npm install
npm run smoke # live end-to-end test against Base mainnet
npm run buildMulti-protocolo (Aerodrome / Velodrome)
Aerodrome (Base) y Velodrome (Optimism) comparten el mismo linaje ve(3,3) — Aerodrome es un fork de Velodrome que hereda el patrón de contratos Sugar/Voter — así que un solo motor cubre ambos. Un proceso de servidor único atiende un protocolo, seleccionado al inicio:
{
"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 por defecto es aerodrome (comportamiento sin cambios si no se configura). Registra ambas entradas para ejecutarlas en paralelo — cada una es un proceso separado con su propio cliente RPC y cachés. Las descripciones de herramientas, el nombre del token ve (veAERO/veVELO) y el nombre del token de recompensa (AERO/VELO) cambian automáticamente según el protocolo configurado; predictive_allocation_status informa correctamente que el mecanismo no es aplicable al ejecutar Velodrome, ya que el anuncio de Dromos Labs es específico de Aerodrome.
Selección de RPC: RPC_URL (nuevo, funciona para cualquier protocolo) siempre tiene prioridad si está configurado; de lo contrario se respeta BASE_RPC_URL por compatibilidad hacia atrás al ejecutar Aerodrome; de lo contrario cada protocolo recurre a un predeterminado público (base-rpc.publicnode.com / mainnet.optimism.io).
Panel web
Una interfaz web de "pools calientes predichos" vive en web/ (Next.js, reutiliza el motor directamente) — actualmente solo Aerodrome/Base:
npm run build # engine dist/ used by the web app
cd web && npm install && npm run devAbre http://localhost:3000 — tabla de pools calientes (comisiones predichas, ventaja, confianza), más paneles interactivos de ROI del votante (ingresa tu veAERO) y asignación de Eficiencia del Protocolo. La primera carga construye la instantánea onchain (~1 min), luego queda en caché.
Conecta una wallet (inyectada o Coinbase Wallet, red Base) para emitir la asignación de ROI del votante como un voto real: tus NFTs veAERO se detectan automáticamente vía VeSugar (entrada manual de ID como respaldo) y el botón "emitir voto" envía Voter.vote() con las ponderaciones recomendadas — firmas en tu wallet; la app nunca guarda claves.
Regístrate con Claude Code:
claude mcp add aero-allocator -- npx tsx /path/to/aero-allocator/src/index.tsO en cualquier configuración de cliente MCP:
{
"mcpServers": {
"aero-allocator": {
"command": "npx",
"args": ["tsx", "/path/to/aero-allocator/src/index.ts"],
"env": { "BASE_RPC_URL": "https://mainnet.base.org" }
}
}
}Ejemplo de flujo de agente:
"Predice la demanda de los mejores pools de Aerodrome, recomienda una asignación de voter_roi en 8 pools, luego prepara el calldata de voto para mi veAERO #12345 y envíalo con mi wallet de Base."
Cómo funciona el pronóstico
Para cada pool candidato (los N principales por TVL en staking por encima de un umbral mínimo de TVL):
Obtén hasta 8 epochs semanales de historial de
RewardsSugar.epochsByAddress— votos, emisiones, comisiones, incentivos por epoch — y valora todo en USD.Extrapola el epoch en curso a su duración completa una vez que haya transcurrido >20% (la señal de demanda más reciente).
Pronostica las comisiones del próximo epoch = media móvil exponencial (α=0,45) + ½ × tendencia lineal, con mínimo en 0. Las puntuaciones de confianza se derivan de la profundidad del historial y la varianza.
predictiveEdge= cuota de demanda de comisiones predicha − cuota de voto actual. Ventaja positiva → pool sub-incentivado: exactamente lo que un asignador de mercado de predicción debería recompensar.
Dos objetivos de asignación:
protocol_efficiency — ponderaciones ∝ cuota de demanda predicha. Este es el ideal de la Asignación Predictiva; útil para tesorerías/protocolos que dirigen incentivos y para comparar el mecanismo en vivo una vez implementado.
voter_roi — maximiza tu recompensa esperada del próximo epoch para una cantidad dada de veAERO (
votingPowerVe). Cada pool paga prorrateado (R·v/(E+v)), así que el optimizador reparte votos por llenado de agua para igualar los retornos marginales — los pools pequeños con alto ROI nominal pero sin capacidad de recompensa reciben naturalmente pocos o ningún voto (además de un mínimo duro de $500 de capacidad). La salida incluye la recompensa esperada en USD por pool después de la auto-dilución.
recommend_bribe_placement invierte esto para equipos/protocolos que gastan un presupuesto de sobornos en lugar de votantes: re-ejecuta el mismo llenado de agua sobre todo el poder de voto activo del mercado, con y sin el soborno añadido al pago de un pool, e informa el delta de cuota de voto. Los votos se llenan por agua ∝ √pago, así que un dólar de soborno tracciona desproporcionadamente más en un pool barato que en uno ya grande. Esto modela una reasignación instantánea, sin fricción y de todo el mercado, así que es un techo teórico, no un pronóstico — útil para comparar pools candidatos, no para predecir un recuento de votos literal.
recommend_lp_deposit se dirige a un tercer público — LP que deciden dónde depositar y hacer staking de liquidez — y deliberadamente no clasifica por predictedFeesUsd. En Aerodrome, las comisiones de trading (y los sobornos) se acumulan a los votantes de veAERO, no a los que hacen staking de liquidez; los stakers en cambio ganan emisiones de AERO prorrateadas al TVL en staking. Así que esta herramienta pronostica las emisiones del próximo epoch a partir del historial de emisiones de cada pool con el mismo modelo EWMA+tendencia que predict_demand usa para comisiones, y anualiza el resultado contra el TVL en staking actual como predictedNextEpochAprPct. También informa currentEpochAprPct, que no necesita ningún pronóstico — la tasa de emisión del epoch en vivo ya fue fijada por los votos emitidos antes de que comenzara, así que se lee directamente en lugar de predecirse.
Precisión del pronóstico
confidence en cada pronóstico comienza como una heurística (profundidad del historial + varianza), luego se recalibra contra la precisión real de backtesting antes de llegar a cualquier salida de herramienta — ver Calibración de confianza más abajo. backtest_summary (herramienta) y npm run backtest (script) exponen la validación completa.
Metodología: avance walk-forward a través del historial de epochs completados de cada pool. En cada límite de epoch histórico, pronostica ese epoch usando solo los epochs que habrían estado realmente disponibles de antemano (limitado a la misma ventana móvil que usa predict_demand — el backtest nunca le da al modelo más historial del que recibe en vivo), luego compara contra lo que realmente sucedió. Los errores se informan como MAE, RMSE y WAPE (Σ|error| / Σreal, robusto ante los epochs de comisiones casi nulas donde MAPE falla), junto con habilidad vs. línea base — la misma comparación contra un modelo ingenuo de "predecir el próximo epoch = último epoch", así que un número de habilidad negativo significa que el pronóstico EWMA+tendencia no está justificando su complejidad frente a no hacer nada. Una tabla de calibración de confianza verifica si los pronósticos de mayor confianza realmente tienen menor error. Una brecha conocida: esto reproduce solo predicciones en límites de epoch — no reproduce la mezcla de extrapolación de ritmo a mitad de epoch utilizada para el epoch en curso en vivo.
Calibración de confianza
La confianza heurística (depthScore × stabilityScore) es una suposición sobre cuán confiable es un pronóstico — nunca ha visto un resultado real. deriveConfidenceCalibration agrupa cada punto de backtest walk-forward por su confianza heurística bruta, calcula el WAPE real realizado dentro de cada grupo, y lo convierte en calibratedConfidence = 1/(1+wape) (la misma forma funcional que la heurística ya usa para su propio término de varianza). predict_demand, recommend_allocation y recommend_bribe_placement luego re-mapean la confianza de cada pronóstico en vivo a través de esta curva mediante applyConfidenceCalibration — así que un rango de confianza que la heurística pensaba que se veía sólido pero que en la práctica ha sido ruidoso se marca a la baja, y viceversa. Esto importa más allá de la visualización: la confianza pondera directamente la estimación de recompensa de voter_roi y filtra los pools candidatos de recommend_bribe_placement, así que una puntuación mal calibrada sesgaría silenciosamente ambos.
Los grupos con menos de 8 muestras de backtest se descartan en lugar de confiarse en ellos, y cualquier pronóstico cuya confianza bruta caiga en un rango descartado (o aún no calculado) conserva su puntuación heurística — la calibración es oportunista sobre la heurística siempre disponible, nunca una dependencia dura. Si un backtest_summary fresco no se ha ejecutado en la última hora, las herramientas relevantes obtienen uno junto con la instantánea del mercado (concurrentemente, para que no aumente la espera) y recurren a la heurística bruta si esa obtención falla por cualquier razón.
Ejecuta npm run backtest para un informe de consola, o llama a backtest_summary desde cualquier agente conectado para números en vivo (caché ~1h; AERO_BACKTEST_EPOCHS / AERO_BACKTEST_MAX_POOLS ajustan la profundidad/amplitud).
Adaptador de Asignación Predictiva
Dromos Labs anunció el mecanismo pero aún no ha publicado contratos/ABI (al 2026-08-16; el lanzamiento se ha retrasado de julio a septiembre de 2026). Todo lo específico del mecanismo vive detrás de una interfaz en src/adapters/predictive-allocation.ts, y está completamente impulsado por configuración — no se necesitan cambios de código el día del lanzamiento, solo configurar variables de entorno una vez que Dromos publique la dirección y el ABI:
Var | Ejemplo | |
|
| La dirección del contrato del mecanismo |
|
| ABI legible para humanos (matriz JSON), función única |
|
| Nombre de la función a llamar |
|
| Roles de argumentos posicionales — compatibles: |
Con los cuatro definidos, prepare_submission construye el calldata real; predictive_allocation_status informa live: true. Hasta entonces, prepare_submission falla con un error claro de "not published yet" y prepare_vote_calldata apunta al flujo clásico de Voter.vote(), que funciona hoy en día.
Configuración (env)
Var | Valor predeterminado | |
|
|
|
| predeterminado del protocolo | RPC dedicado, para cualquiera de los protocolos — siempre tiene prioridad si se establece |
|
| Alias heredado de |
|
| Umbral mínimo de TVL del pool candidato |
|
| Pools que reciben análisis completo del historial de épocas |
|
| Épocas de historial extraídas por pool para |
|
| Pools analizados por ejecución predeterminada de |
Contratos utilizados
Ambos de deployments/{base,optimism}.env de velodrome-finance/sugar; direcciones de tokens de recompensa verificadas de forma cruzada con DefiLlama + CoinGecko.
Aerodrome (Base, 8453) | Velodrome (Optimism, 10) | |
LpSugar |
|
|
RewardsSugar |
|
|
VeSugar |
|
|
Voter |
|
|
Token de recompensa (AERO/VELO) |
|
|
Hoja de ruta
El adaptador de Asignación Predictiva está basado en configuración y listo para lanzamiento — conectar los contratos reales es un cambio de variable de entorno (
prepare_submission)Señales sociales/de atención (menciones en Farcaster, listados de tokens) como características de pronóstico
Infraestructura de backtest: reproducir épocas pasadas, evaluar el pronóstico frente a las tarifas realizadas, publicar la precisión (
backtest_summary,npm run backtest)Endpoint alojado monetizado con x402 (pago por pronóstico en USDC a través de Bankr)
Panel de "pools calientes predichos" (
web/)Conexión de billetera + voto con un clic desde el panel (wagmi)
Multiprotocolo: Velodrome (Optimism) junto con Aerodrome (Base), seleccionado mediante
AERO_PROTOCOLSoporte multiprotocolo del panel (
web/) (actualmente solo Aerodrome/Base)
Aviso legal
Los pronósticos son extrapolaciones estadísticas del historial en cadena, no son asesoramiento financiero. Revise siempre el calldata antes de firmar.
Available Tools
6 toolspool_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).
| Name | Required | Description | Default |
|---|---|---|---|
| pool | Yes | Pool (lp) address | |
| epochs | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max pools to return | |
| sortBy | No | predicted_fees | |
| refresh | No | Force a fresh onchain snapshot |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| veNftId | Yes | veAERO NFT token id that holds the voting power | |
| allocations | Yes |
TDQS
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.
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.
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.
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.
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.
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%.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | ||
| maxPools | No | ||
| objective | No | voter_roi |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max pools to return | |
| minTvlUsd | No | Minimum pool TVL in USD |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v0.1.0- First observed
pool_history - First observed
predict_demand - First observed
predictive_allocation_status - First observed
prepare_vote_calldata - First observed
recommend_allocation - First observed
scan_pools
TDQS
Scored across 6 tools
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.
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.
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.
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
Related MCP Connectors
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
MCP server for Boson Protocol — on-chain agentic commerce for physical & digital goods.
Official Aave MCP for V3 and V4 markets, positions, governance, and transaction preparation.
Pay-per-call DeFi and macro intel for AI agents. x402 USDC tools via streamable HTTP /api/mcp.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP (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
- AlicenseNot gradedqualityBmaintenanceAn 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 npm2MIT
- AlicenseNot gradedqualityCmaintenanceMCP server to fetch DeFi yield opportunities on Base chain, including Aerodrome LP and Moonwell lending, with pay-per-call via x402 micropayments.MIT
- AlicenseNot gradedqualityDmaintenanceMCP 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 npmMIT