Skip to main content
Glama

aeX402 — Cross-Chain DeFi MCP: LINQ, AMM, Bridge, AI

mcp_linq

Primary LINQ-style MCP workflow tool. Run one bounded MCP call: fan out up to 32 READ-ONLY tool calls across chains, then compose the combined result with fluent chains like results.selectMany(...).where(...).groupBy(...).orderByDesc(...).take(...), JSON pipeline steps, or reducers. Use mcp_linq when you want one aggregate answer instead of N tool calls.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
linqNoLINQ-like query string compiled into pipeline steps. Supports fluent dot chaining and query clauses. .where()/.map()/.select() bodies AND .orderBy()/.orderByDesc()/.distinctBy()/.groupBy() keys are all real expressions — ternaries, &&/||, comparisons, arithmetic, member/index access, object/array literals, and a small method whitelist (.includes/.startsWith/.endsWith/.toLowerCase/.toUpperCase/.trim/.slice/.indexOf/.split/.join, Math.min/max/round/floor/ceil/abs, String()/Number()/Boolean()) all work, e.g. results.map(r => r.ok ? ({chain: r.id, height: r.output}) : ({chain: r.id, height: -1})), or ranking by a COMPUTED score: results.where(r => r.ok).orderByDesc(r => r.output.volume24h * r.output.priceChangePct).take(10) — the ranking key is not limited to a bare field. Fluent example: results.selectMany(r => r.output.programs[]).where(p => p.type in ("token","canonical-token")).groupBy(p => p._chain, assets=count(), activity=sum(activity)).orderByDesc(assets).take(5). Clause example: from results[] | expand output.programs[] | where type in ("token","canonical-token") | group by _chain as chain select assets=count(), activity=sum(activity) | order by assets desc | take 5.
callsYesRead-only MCP tool calls to run. Each call has {id?, tool, args?, pick?}. pick is a dot path into that call output; [] flattens arrays.
reduceNoNamed reductions to compute from subcall outputs. Example: {"total":{"op":"sum","path":"results[].picked"},"top":{"op":"top","path":"results[]","sortBy":"picked","limit":5}}.
pipelineNoLINQ-style chained transforms over the raw batch result. Each step feeds the next. Ops: from, expand, where, select/project, groupBy, orderBy/sort, take/limit, skip, distinct, count, sum, avg, min, max, first, top. Example: [{"op":"from","path":"results[]"},{"op":"expand","path":"output.programs[]"},{"op":"where","path":"type","in":["token","canonical-token"]},{"op":"groupBy","by":"_chain","as":"chain","aggregates":{"tokens":{"op":"count"},"activity":{"op":"sum","path":"activity"}}},{"op":"orderBy","path":"tokens","dir":"desc"},{"op":"take","count":5}].
concurrencyNoParallelism for subcalls (default 8, max 12).
ignoreFailuresNoWhen reduce/pipeline/linq is used, a failed subcall is normally still reported in `failures` alongside the aggregate result, since a `.where(ok)`-style query would otherwise make it invisible. Set true to suppress that and get back only {reductions?, result?} — use when you already expect some chains/calls to fail and only want whatever succeeded. Defaults to false (failures still shown) because silently dropping an error is a real information loss, not just an efficiency choice — this one is opt-in on purpose.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okNoomitted when reduce/pipeline/linq was requested — the aggregation response is just the answer, not this batch-fanout shape
noteNoomitted when reduce/pipeline/linq was requested
callsNonumber of subcalls attempted; omitted when reduce/pipeline/linq was requested
resultNoThe pipeline/linq output value — the entire point of the call when args.pipeline or args.linq was passed, returned alone rather than wrapped; omitted when neither was passed
resultsNoomitted when reduce/pipeline/linq was requested — see failures instead for what went wrong
failuresNoomitted when every subcall succeeded, when ignoreFailures:true was passed, or when no aggregation was requested (failures show inside results instead)
reductionsNonamed reducer outputs; omitted when args.reduce was not passed
concurrencyNoomitted when reduce/pipeline/linq was requested

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden and does disclose safety (READ-ONLY), boundedness (up to 32 calls), and aggregation semantics. But it leaves important traits — subcall failure collection, ordering guarantees, and result envelope behavior — to the schema (e.g., the ignoreFailures param description) rather than the tool description itself.

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?

Exactly three sentences, front-loaded: identity ("Primary LINQ-style MCP workflow tool"), mechanism (fan-out + compose), and usage guidance. Every sentence earns its place with zero filler, appropriately deferring technical detail to the schema.

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?

For a complex 6-param tool with nested objects, an output schema, and exhaustive 100% schema coverage, the lean description provides the correct mental model and is sufficient for orientation. Minor gap: it offers no guidance on when to prefer linq string vs pipeline vs reduce, though the schema examples largely compensate.

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%, and every parameter is richly documented (linq syntax with examples, pipeline ops with a worked example, reduce ops, concurrency limits, ignoreFailures rationale). Per rubric, the baseline 3 applies since the schema carries the load; the description only loosely hints at the three composition modes without adding param-level meaning.

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 names a specific workflow with verb+resource+scope: "Run one bounded MCP call: fan out up to 32 READ-ONLY tool calls... then compose the combined result." It clearly distinguishes from siblings with "Use mcp_linq when you want one aggregate answer instead of N tool calls," positioning it against the single-call tools (evm_rpc, solana_rpc, mcp_call, fetch).

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?

"Use mcp_linq when you want one aggregate answer instead of N tool calls" is an explicit when-to-use trigger, and the "READ-ONLY" constraint implies it is not for mutation tools. However, it names no explicit alternatives or when-not cases beyond the read-only exclusion and the aggregate-use trigger.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

B3.4/5.0
Disambiguation3/5

Several tool pairs overlap in function: aex402_quote vs aex402_buildSwap, search vs search_tokens vs discover_programs, describe_program vs reconstruct_abi, and mcp_linq vs agent_delegate. Descriptions attempt to differentiate, but boundaries are fuzzy and an agent could easily select the wrong one when uncertain.

Naming Consistency2/5

Naming is inconsistent: some tools use camelCase (aex402_buildSwap) while most use snake_case, verbs vary widely (build, get, list, quote, search, describe, discover, launch, delegate, chat), and there is no uniform verb_noun pattern. This makes predicting tool names difficult.

Tool Count2/5

32 tools is excessive for a single MCP server, exceeding the 25+ threshold. While the scope is broad (AMM, bridge, AI, RPC, discovery, launchpad), many tools could be consolidated (e.g., search tools) or are too fine-grained (multiple solana_get* tools).

Completeness4/5

Core workflows are well covered: AMM (quote/build/get/list), bridge (quote/status), AI (chat/delegate/linq), Solana and EVM RPCs, search/discovery plus health check, launchpad, and payment help. Minor gaps include no direct bridge history or AMM execution, but these are intentional in a non-custodial design.

Resources