epsilon
Registry code: fd11847d6318ed1e
Non-custodial limit, stop-loss and DCA trading on Epsilon (Robinhood Chain) for AI agents
from a public catalogue that lists it, not from the operator
- endpoint
- https://api.epsilon.exchange/mcp
- protocol
- streamable-http ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is epsilon live?
- Yes — it answered the hub's last check (checked 16m ago). It answered 100% of checks over the last 30 days.
- Is epsilon free to use?
- Partly — some of its tools are open, others need a key or payment.
- What tools does epsilon have?
- 22 tools: get_order, get_grant, place_market_order, place_stop_order, list_orders, get_quote, cancel_order, check_order, ….
- Is epsilon safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99.7%· all time 99.7%
last good check
of 22 tools
- down → live
- degraded → live
- live → degraded· timeout after 20000ms
- unknown → live
- used for
- get swap quote
- view orderbook
- check order status
- get dex market overview
- takes → gives
- text → data
- tools
- 8 reads
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
get_error_catalog open 11h ago
Machine-readable catalog of every error code the Epsilon API returns, with meanings and retry guidance. Consult it when any other tool returns an error code you need to interpret or decide whether to retry.
{ "type": "object", "additionalProperties": false }arguments 4 lineslist_examples reads open 16m ago
List runnable Epsilon integration examples (Python cron DCA, LangChain tools, Vercel AI SDK tools, Telegram bot). Fetch full source with get_example. No API key required.
{ "type": "object", "additionalProperties": false }arguments 4 lineslist_fills auth-required 16m ago
Executed trades (swaps and order fills) on Epsilon, newest first, optionally for one wallet — the trade history. For resting/open orders use list_orders. Amounts are RAW token units.
{ "type": "object", "properties": { "limit": { "type": "integer", "description": "max rows (default 100, cap 500)" }, "wallet": { "type": "string", "description": "optional wallet address to filter by" } }, "additionalProperties": false }arguments 14 linessearch_tokens reads auth-required 16m ago
Resolve a token symbol or name to its address and decimals — call this FIRST when the user names a token; every other tool takes addresses. volume30dUsd disambiguates same-symbol tokens: the real one has volume.
{ "type": "object", "properties": { "limit": { "type": "integer", "description": "max rows (default 20, cap 100)" }, "search": { "type": "string", "description": "symbol or name fragment (e.g. USDG), or an exact 0x address; empty returns the top tokens by 30-day volume" } }, "additionalProperties": false }arguments 14 linesget_me auth-required 11h ago
The signed-in Epsilon account behind this session: account id, handle, linked wallets (embedded first), the scopes this client was granted, and which client is connected. Call it first after sign-in to learn the wallet address other tools need. Requires an OAuth session (connect to /mcp/account); on the keyless /mcp endpoint it explains how to sign in instead.
{ "type": "object", "additionalProperties": false }arguments 4 linesget_market_stats auth-required 11h ago
Market-level numbers for Epsilon (Robinhood Chain DEX). scope=overview (default) is the best first call: top tokens by 30-day volume, 24h volume, and engine-wide order/fill stats in one response. scope=engine returns only order counts by status, fill counts and volume aggregates; scope=volume returns per-token and total swap volume over window. For one token use search_tokens; for executed trades use list_fills.
{ "type": "object", "properties": { "scope": { "type": "string", "description": "what to return: overview (default — top tokens by 30d volume + 24h volume + engine stats, the best first call), engine (order counts by status, fill counts, volume aggregates), or volume (per-token and total swap volume over window)" }, "window": { "type": "string", "description": "for scope=volume: 1h, 24h (default), 7d, 30d, or all" } }, "additionalProperties": false }arguments 14 linesget_order unknown never probed
One Epsilon order by hash: status (pending/active/filled/cancelled/expired), parameters, and its fills. Use list_orders to find orders by wallet first; use get_orderbook for the market's resting orders on a pair.
{ "type": "object", "required": [ "orderHash" ], "properties": { "orderHash": { "type": "string", "description": "EIP-712 order hash (0x-hex, 32 bytes)" } }, "additionalProperties": false }arguments 13 linesget_grant unknown never probed
The signed-in account's agent grant for this channel, if any: the embedded wallet it signs with, per-order and daily caps, what remains today, allowed order kinds, and whether the Epsilon signer is actually granted on the wallet. Call it before placing to know whether an order will be placed immediately or need an approval link. Grants are created and revoked by the user in the Epsilon app, never by a tool.
{ "type": "object", "additionalProperties": false }arguments 4 linesplace_market_order unknown never probed
Ask the user to approve a market swap of amount tokenIn → tokenOut at the best current route. Returns an approval link, not a fill: the user signs in the Epsilon app. Use get_quote first to tell the user what to expect. For a price-conditional order use place_limit_order or place_stop_order. Amounts are HUMAN units.
{ "type": "object", "required": [ "tokenIn", "tokenOut", "amount" ], "properties": { "note": { "type": "string", "description": "optional one-line reason shown to the user on the approval page (≤ 140 chars)" }, "amount": { "type": "string", "description": "amount of tokenIn in HUMAN units, decimal string (e.g. \"50\" USDG, \"0.25\" WETH) — not raw units" }, "tokenIn": { "type": "string", "description": "ERC-20 address being sold (0x-hex); resolve symbols with search_tokens first" }, "tokenOut": { "type": "string", "description": "ERC-20 address being bought (0x-hex)" }, "slippageBps": { "type": "integer", "description": "slippage tolerance in basis points (default 100 = 1%, max 5000)" } }, "additionalProperties": false }arguments 31 linesplace_stop_order unknown never probed
Place a stop-loss: sell amount tokenIn for tokenOut if the price falls to triggerPrice (tokenOut per tokenIn). Keeper-executed. Queued under an active agent grant that covers it, otherwise returns an approval link (status needs_approval). Use place_limit_order to sell ABOVE the market (take profit); this tool is for protection BELOW it. Autonomous stops enforce a signed minimum and may remain unfilled after a price gap. HUMAN units.
{ "type": "object", "required": [ "tokenIn", "tokenOut", "amount", "triggerPrice" ], "properties": { "note": { "type": "string", "description": "optional one-line reason shown to the user (≤ 140 chars)" }, "amount": { "type": "string", "description": "amount of tokenIn to sell, HUMAN units, decimal string" }, "tokenIn": { "type": "string", "description": "ERC-20 address being sold when the stop triggers (0x-hex)" }, "tokenOut": { "type": "string", "description": "ERC-20 address received (0x-hex), usually USDG" }, "requestId": { "type": "string", "description": "stable 32 lowercase hex characters for this trade; required for autonomous execution, reuse unchanged when retrying" }, "slippageBps": { "type": "integer", "description": "slippage tolerance for the fill in basis points (default 100)" }, "triggerPrice": { "type": "string", "description": "stop trigger in tokenOut per 1 tokenIn, decimal string — strict floor stop order; may remain unfilled if the price gaps below its minimum" } }, "additionalProperties": false }arguments 40 lineslist_orders reads unknown never probed
A wallet's Epsilon orders filtered by status and/or type — the portfolio view, newest first. Use get_order for one order's fills; use list_fills for executed trades.
{ "type": "object", "properties": { "type": { "type": "string", "description": "order type filter, e.g. limit, dca, trailing" }, "limit": { "type": "integer", "description": "max rows (default 100, cap 500)" }, "status": { "type": "string", "description": "order status filter, e.g. active, filled, cancelled" }, "wallet": { "type": "string", "description": "maker wallet address to filter by (0x-hex)" } }, "additionalProperties": false }arguments 22 linesget_quote reads unknown 18h ago
Best executable quote for swapping tokenIn → tokenOut on Epsilon (Robinhood Chain, id 4663): expected output and price. Use this for a quick price check; use get_route when you need the venue split, fee legs or minimum output for an order you will sign. Amounts are RAW token units — scale by the token's decimals first. Never executes.
{ "type": "object", "required": [ "tokenIn", "tokenOut", "amountIn" ], "properties": { "tokenIn": { "type": "string", "description": "ERC-20 address of the token being sold (0x-hex)" }, "amountIn": { "type": "string", "description": "amount of tokenIn in RAW token units (decimal string, already scaled by the token's decimals)" }, "tokenOut": { "type": "string", "description": "ERC-20 address of the token being bought (0x-hex)" } }, "additionalProperties": false }arguments 23 linescancel_order unknown never probed
Ask the user to approve cancelling one of their open orders (hash from list_orders). Returns an approval link; the cancellation is signed by the user's wallet in the Epsilon app. Orders already filled cannot be cancelled.
{ "type": "object", "required": [ "orderHash" ], "properties": { "note": { "type": "string", "description": "optional reason shown to the user (≤ 140 chars)" }, "orderHash": { "type": "string", "description": "EIP-712 order hash to cancel (0x-hex, 32 bytes) — from list_orders" } }, "additionalProperties": false }arguments 17 linescheck_order unknown never probed
Check whether a resting order (limit, stop, DCA, trailing) for this pair and size would be executable: oracle support, liquidity, minimum size. Run this before signing any resting order; it does not price the trade — get_route does. Amounts are RAW token units.
{ "type": "object", "required": [ "tokenIn", "tokenOut", "amountIn" ], "properties": { "tokenIn": { "type": "string", "description": "ERC-20 address of the token being sold (0x-hex)" }, "amountIn": { "type": "string", "description": "amount of tokenIn in RAW token units (decimal string, already scaled by the token's decimals)" }, "tokenOut": { "type": "string", "description": "ERC-20 address of the token being bought (0x-hex)" } }, "additionalProperties": false }arguments 23 linesget_orderbook reads unknown never probed
The market's open (pending/active) limit orders on both sides of a token pair, largest first — liquidity you can rest against. For one wallet's own orders use list_orders instead.
{ "type": "object", "required": [ "tokenA", "tokenB" ], "properties": { "tokenA": { "type": "string", "description": "first token address of the pair (0x-hex)" }, "tokenB": { "type": "string", "description": "second token address of the pair (0x-hex)" } }, "additionalProperties": false }arguments 18 linesplace_dca_order unknown never probed
Ask the user to approve a DCA program: sell amount of tokenIn for tokenOut in `executions` equal slices, one every `every` (15m, 1h, 1d…). Optionally gated by triggerPrice (only sells at or below it). Keeper-executed after signing; always returns an approval link — DCA is never executed under an agent grant. HUMAN units; amount is the TOTAL.
{ "type": "object", "required": [ "tokenIn", "tokenOut", "amount", "every", "executions" ], "properties": { "note": { "type": "string", "description": "optional one-line reason shown to the user (≤ 140 chars)" }, "every": { "type": "string", "description": "interval between sells like 15m, 1h, 1d (minimum 1m)" }, "amount": { "type": "string", "description": "TOTAL amount of tokenIn across the whole program, HUMAN units, decimal string" }, "tokenIn": { "type": "string", "description": "ERC-20 address being sold in slices (0x-hex)" }, "tokenOut": { "type": "string", "description": "ERC-20 address being accumulated (0x-hex)" }, "executions": { "type": "integer", "description": "number of sells, 2–500; each sells amount/executions" }, "slippageBps": { "type": "integer", "description": "slippage tolerance per execution in basis points (default 100)" }, "triggerPrice": { "type": "string", "description": "optional: only sell while price is at or below this (tokenOut per tokenIn); omit to sell every interval regardless" }, "pauseOnRecovery": { "type": "boolean", "description": "with triggerPrice: pause the program while price is back above the trigger" } }, "additionalProperties": false }arguments 49 linesplace_limit_order unknown never probed
Place a resting limit order: sell amount tokenIn for tokenOut once the market reaches limitPrice (tokenOut per tokenIn) or better. Keeper-executed — it keeps working with the chat closed. If the user granted this client an agent grant and the order fits its caps, it is queued with a stable requestId (status reserved or submitted); otherwise you get an approval link the user signs in the Epsilon app (status needs_approval). Run check_order first. For a protective sell below the market use place_stop_order; for an immediate swap use place_market_order. HUMAN units.
{ "type": "object", "required": [ "tokenIn", "tokenOut", "amount", "limitPrice" ], "properties": { "note": { "type": "string", "description": "optional one-line reason shown to the user (≤ 140 chars)" }, "amount": { "type": "string", "description": "amount of tokenIn in HUMAN units, decimal string" }, "tokenIn": { "type": "string", "description": "ERC-20 address being sold (0x-hex)" }, "tokenOut": { "type": "string", "description": "ERC-20 address being bought (0x-hex)" }, "expiresIn": { "type": "string", "description": "optional lifetime like 7d, 24h, 30m; default: never" }, "requestId": { "type": "string", "description": "stable 32 lowercase hex characters for this trade; required for autonomous execution, reuse unchanged when retrying" }, "limitPrice": { "type": "string", "description": "price in tokenOut per 1 tokenIn, decimal string (e.g. selling WETH for USDG at \"4200\")" }, "slippageBps": { "type": "integer", "description": "slippage tolerance for the fill in basis points (default 100)" } }, "additionalProperties": false }arguments 44 linesplace_trailing_order unknown never probed
Ask the user to approve a trailing stop: sell amount tokenIn for tokenOut when price drops trailPercent below its running high since placement. Keeper-executed after signing; always returns an approval link — trailing stops are never executed under an agent grant. For a fixed level use place_stop_order. HUMAN units.
{ "type": "object", "required": [ "tokenIn", "tokenOut", "amount", "trailPercent" ], "properties": { "note": { "type": "string", "description": "optional one-line reason shown to the user (≤ 140 chars)" }, "amount": { "type": "string", "description": "amount of tokenIn to sell, HUMAN units, decimal string" }, "tokenIn": { "type": "string", "description": "ERC-20 address being protected / sold when the trail triggers (0x-hex)" }, "tokenOut": { "type": "string", "description": "ERC-20 address received (0x-hex), usually USDG" }, "expiresIn": { "type": "string", "description": "optional lifetime like 7d, 30d; default 7d" }, "slippageBps": { "type": "integer", "description": "slippage tolerance for the fill in basis points (default 100)" }, "trailPercent": { "type": "number", "description": "distance below the running high that triggers the sell, in percent (e.g. 5 = 5%); 0.1–99" } }, "additionalProperties": false }arguments 40 linesget_approval unknown 18h ago
Status of an approval you created: pending (user hasn't decided), submitted (with orderHash or txHash — then use get_order to follow fills), rejected, failed, or expired (links live 30 minutes). Poll no more than every few seconds.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "approval id returned by a place_*/cancel_order call (apr_…)" } }, "additionalProperties": false }arguments 13 linesget_example reads unknown 18h ago
Full source code of one Epsilon integration example, by id from list_examples. No API key required.
{ "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "example id from list_examples, e.g. python-dca-cron" } }, "additionalProperties": false }arguments 13 linesget_route reads unknown 22h ago
Full routing breakdown for a swap: best venue split, expected and minimum output, price impact (ppm), and the feeLegs a signed order must embed (pass orderType for a resting order so the right fee cell is served). Use get_quote for a plain price; use check_order to learn whether a resting order would be executable at all. Read-only. Amounts are RAW token units.
{ "type": "object", "required": [ "tokenIn", "tokenOut", "amountIn" ], "properties": { "wallet": { "type": "string", "description": "optional maker wallet address — include it to get the exact feeLegs an order for this wallet must embed" }, "tokenIn": { "type": "string", "description": "ERC-20 address of the token being sold (0x-hex)" }, "amountIn": { "type": "string", "description": "amount of tokenIn in RAW token units (decimal string, already scaled by the token's decimals)" }, "tokenOut": { "type": "string", "description": "ERC-20 address of the token being bought (0x-hex)" }, "orderType": { "type": "string", "description": "order kind being priced (limit | stop_loss | take_profit | dca | trailing) — selects the fee cell served in feeLegs; omit for a direct swap" }, "triggered": { "type": "boolean", "description": "with orderType=dca: the schedule gates on a trigger (triggered DCA fee cell)" }, "slippageBps": { "type": "integer", "description": "slippage tolerance in basis points (default 100 = 1%)" } }, "additionalProperties": false }arguments 39 linessearch_docs reads unknown 22h ago
Search the Epsilon developer documentation (API, auth, order signing, webhooks, rev-share, SDKs, MCP). Returns the most relevant doc sections. No API key required.
{ "type": "object", "required": [ "query" ], "properties": { "limit": { "type": "integer", "description": "max sections to return (default 5, cap 10)" }, "query": { "type": "string", "description": "what to look for in the Epsilon developer docs, e.g. 'sign an order', 'rate limits', 'webhooks signature'" } }, "additionalProperties": false }arguments 17 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's idfd11847d6318ed1e.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/fd11847d6318ed1e/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/fd11847d6318ed1e?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.