MCP server for A2A-Swap — exposes swap, liquidity, and pool tools for AI agents on Solana
The MCP server defines 10 tools with mostly clear names, comprehensive descriptions, and structured input schemas. Tool names follow verb_noun conventions (simulate_swap, execute_swap, provide_liquidity, etc.). Descriptions are explicit about when to call each tool and what each does. Input schemas include type declarations and parameter descriptions. However, there are notable gaps: no output schemas documented in the source, missing parameter constraints (enums, min/max bounds), no error handling guidance visible, no per-parameter validation rules stated in descriptions, and no tool annotations (readOnlyHint/destructiveHint). The server handles both READ_ONLY and WRITE operations but does not expose these as schema annotations. Parameter naming is generally good but could be more specific (e.g., 'amount' should clarify atomic units more prominently). Security is handled via environment variable injection (SOLANA_PRIVATE_KEY), which is correct. Composition is sound, tools are single-purpose and chain well (e.g., active_pools → pool_info → simulate_swap → execute_swap).
List every liquidity pool deployed on A2A-Swap with live reserves, spot price, LP supply, and fee rate. No arguments required. Use this for discovery — call it on startup to learn which token pairs are available before routing a swap. Read-only — no wallet required.
Collect accrued LP trading fees from an A2A-Swap pool position. If auto_compound was enabled on the position, fees are reinvested as additional LP shares instead of transferred. Requires SOLANA_PRIVATE_KEY env var.
Deploy a new A2A-Swap liquidity pool for a token pair. The creator becomes the first liquidity provider and sets the initial price via amount_b. Requires SOLANA_PRIVATE_KEY env var.
Execute an atomic token swap on A2A-Swap with slippage protection. Simulates first, enforces the slippage limit, then sends the transaction. Requires SOLANA_PRIVATE_KEY env var.
Show accrued trading fees across all LP positions owned by the agent wallet. Includes both on-chain stored fees and pending fees accrued since last sync. Requires SOLANA_PRIVATE_KEY env var.
No output schemas documented. While input schemas are provided, the response structure for each tool is not formally specified. LLMs cannot predict what fields will be returned, making downstream tool composition and data extraction error-prone.
Missing parameter constraints (enums, min/max, regex patterns). Numeric parameters like 'amount' and 'max_slippage_bps' lack explicit bounds. String parameters accept both symbol and mint address but do not constrain format or provide validation rules in descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 49 | - | v1 |
List all LP positions owned by the agent wallet across all A2A-Swap pools. Shows LP share balances, pool addresses, and auto-compound settings. Requires SOLANA_PRIVATE_KEY env var (used as the identity to query).
Fetch current state of a specific A2A-Swap liquidity pool: reserves, spot price, LP supply, fee rate. Use active_pools first if you don't know which pairs exist. Read-only — no wallet required.
Deposit tokens into an A2A-Swap pool and receive LP shares recorded in a Position account. For the first deposit into a new pool provide both amount_a and amount_b to set the initial price. For subsequent deposits omit amount_b — the program computes it from live reserves. Requires SOLANA_PRIVATE_KEY env var.
Burn LP shares and withdraw proportional tokens from an A2A-Swap pool. Accrued fees are synced but not transferred — run claim_fees after. Requires SOLANA_PRIVATE_KEY env var.
Preview a token swap on A2A-Swap without spending any funds. Returns full fee breakdown (protocol fee, LP fee, price impact) and estimated output. Use this before execute_swap to check rates. No wallet required.
No error handling guidance visible in tool descriptions. Tools like execute_swap and provide_liquidity modify state but do not document what errors can occur, what they mean, or how to recover. E.g., what happens if slippage exceeds max_slippage_bps, or if the pool does not exist?
Tool annotations missing. Tools declare Risk: READ_ONLY or Risk: WRITE in metadata, but the MCP schema does not expose readOnlyHint, destructiveHint, or idempotentHint annotations. This prevents clients from automatically gating dangerous operations.
Optional parameters have no documented defaults. E.g., max_slippage_bps defaults to 50, auto_compound defaults to false, min_a and min_b default to '0'. While defaults are mentioned in some descriptions, they are not formally specified in the schema or consistently applied across all tools.
my_positions and my_fees lack response structure clarity. Descriptions state what they show but do not specify field names, types, or array structures. An LLM cannot reliably extract 'LP share balances' or 'accrued fees' without knowing the exact response schema.
Interdependencies undocumented. pool_info requires token_a and token_b as parameters, but the description does not explicitly state that you should call active_pools first if you do not know the pair. Similarly, provide_liquidity states 'omit amount_b for proportional deposit' but does not clarify when this is valid or what error occurs if you do.
No idempotency guarantees stated. Tools like execute_swap and claim_fees are state-modifying operations. If an agent retries after a timeout or failure, will duplicate swaps or double-claimed fees occur? Descriptions do not address idempotency or retry safety.