Skip to content

Epsilon

by alienbase-xyz · remote · local (npm) · no sign-in to list tools · v0.4.0 · published by GitHub user alienbase-xyz

Non-custodial limit, stop-loss and DCA trading on Epsilon (Robinhood Chain) for AI agents

Deletes · 1Changes · 6

22 tools: 1 can delete or cancel things, 6 change things and 15 only read.

Scanned Oct 21, 2026

3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http epsilon https://api.epsilon.exchange/mcp --header 'X-API-Key: <your-x-api-key>'

Findings

Matches of fixed checks, with the text they matched.

3 warn
  • The server marks "cancel_order" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "cancel_order" says "cancel": a word for removing or ending something.

    What this check looks for
  • The description contains "any other tool", wording about other tools or servers.

    Matched text

    description: "...ngs and retry guidance. Consult it when any other tool returns an error code you need to inter..."

    What this check looks for
  • The description contains "every other tool", wording about other tools or servers.

    Matched text

    description: "...this FIRST when the user names a token; every other tool takes addresses. volume30dUsd disambigu..."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

22 tools

Deletes or cancels 1Claude Code: deny
  • cancel_orderAsk the user to approve cancelling one of their open orders (hash from list_orders).1 finding

    Why it is in this group

    • The name "cancel_order" says "cancel": a word for removing or ending something.
    • The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "cancel_order" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}; The name "cancel_order" says "cancel": a word for removing or ending something.

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • readOnlyHint: false
    • title: Cancel Order (needs approval)
Changes things 6Claude Code: ask
  • check_orderCheck whether a resting order (limit, stop, DCA, trailing) for this pair and size would be executable: oracle support, liquidity, minimum size.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Order Preflight Check
  • place_dca_orderAsk the user to approve a DCA program: sell amount of tokenIn for tokenOut in `executions` equal slices, one every `every` (15m, 1h, 1d…).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • readOnlyHint: false
    • title: Place DCA Order (needs approval)
  • place_limit_orderPlace a resting limit order: sell amount tokenIn for tokenOut once the market reaches limitPrice (tokenOut per tokenIn) or better.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • readOnlyHint: false
    • title: Place Limit Order (needs approval)
  • place_market_orderAsk the user to approve a market swap of amount tokenIn → tokenOut at the best current route.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • readOnlyHint: false
    • title: Place Market Order (needs approval)
  • place_stop_orderPlace a stop-loss: sell amount tokenIn for tokenOut if the price falls to triggerPrice (tokenOut per tokenIn).No findings

    Why it is in this group

    • The name "place_stop_order" says "stop": a word for a change.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • readOnlyHint: false
    • title: Place Stop Order (needs approval)
  • place_trailing_orderAsk the user to approve a trailing stop: sell amount tokenIn for tokenOut when price drops trailPercent below its running high since placement.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • readOnlyHint: false
    • title: Place Trailing Stop (needs approval)
Only reads 15Claude Code: allow
  • get_approvalStatus 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 liv…No findings

    Why it is in this group

    • The name "get_approval" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Get Approval Status
  • get_error_catalogMachine-readable catalog of every error code the Epsilon API returns, with meanings and retry guidance.1 finding

    Why it is in this group

    • The name "get_error_catalog" says "get": a word for reading.

    Findings

    • Warn

      The description contains "any other tool", wording about other tools or servers.

      Matched text

      description: "...ngs and retry guidance. Consult it when any other tool returns an error code you need to inter..."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: API Error Catalog
  • get_exampleFull source code of one Epsilon integration example, by id from list_examples.No findings

    Why it is in this group

    • The name "get_example" says "get": a word for reading.
    Description, as the server wrote it
    Full source code of one Epsilon integration example, by id from list_examples. No API key required.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Get Code Example
  • get_grantThe 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 …No findings

    Why it is in this group

    • The name "get_grant" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Get Agent Grant
  • get_market_statsMarket-level numbers for Epsilon (Robinhood Chain DEX).No findings

    Why it is in this group

    • The name "get_market_stats" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Market Stats
  • get_meThe 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.No findings

    Why it is in this group

    • The name "get_me" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Who Am I
  • get_orderOne Epsilon order by hash: status (pending/active/filled/cancelled/expired), parameters, and its fills.No findings

    Why it is in this group

    • The name "get_order" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Get Order Status
  • get_orderbookThe market's open (pending/active) limit orders on both sides of a token pair, largest first — liquidity you can rest against.No findings

    Why it is in this group

    • The name "get_orderbook" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Get Orderbook
  • get_quoteBest executable quote for swapping tokenIn → tokenOut on Epsilon (Robinhood Chain, id 4663): expected output and price.No findings

    Why it is in this group

    • The name "get_quote" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Get Quote
  • get_routeFull 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 …No findings

    Why it is in this group

    • The name "get_route" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Get Swap Route
  • list_examplesList runnable Epsilon integration examples (Python cron DCA, LangChain tools, Vercel AI SDK tools, Telegram bot).No findings

    Why it is in this group

    • The name "list_examples" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: List Code Examples
  • list_fillsExecuted trades (swaps and order fills) on Epsilon, newest first, optionally for one wallet — the trade history.No findings

    Why it is in this group

    • The name "list_fills" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Recent Swaps
  • list_ordersA wallet's Epsilon orders filtered by status and/or type — the portfolio view, newest first.No findings

    Why it is in this group

    • The name "list_orders" says "list": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: List Orders
  • search_docsSearch the Epsilon developer documentation (API, auth, order signing, webhooks, rev-share, SDKs, MCP).No findings

    Why it is in this group

    • The name "search_docs" says "search": a word for reading.
    Description, as the server wrote it
    Search the Epsilon developer documentation (API, auth, order signing, webhooks, rev-share, SDKs, MCP). Returns the most relevant doc sections. No API key required.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Search Docs
  • search_tokensResolve a token symbol or name to its address and decimals — call this FIRST when the user names a token; every other tool takes addresses.1 finding

    Why it is in this group

    • The name "search_tokens" says "search": a word for reading.

    Findings

    • Warn

      The description contains "every other tool", wording about other tools or servers.

      Matched text

      description: "...this FIRST when the user names a token; every other tool takes addresses. volume30dUsd disambigu..."

      What this check looks for
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: false
    • readOnlyHint: true
    • title: Search Tokens

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.4.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http epsilon https://api.epsilon.exchange/mcp --header 'X-API-Key: <your-x-api-key>'

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__epsilon__get_approval",
      "mcp__epsilon__get_error_catalog",
      "mcp__epsilon__get_example",
      "mcp__epsilon__get_grant",
      "mcp__epsilon__get_market_stats",
      "mcp__epsilon__get_me",
      "mcp__epsilon__get_order",
      "mcp__epsilon__get_orderbook",
      "mcp__epsilon__get_quote",
      "mcp__epsilon__get_route",
      "mcp__epsilon__list_examples",
      "mcp__epsilon__list_fills",
      "mcp__epsilon__list_orders",
      "mcp__epsilon__search_docs",
      "mcp__epsilon__search_tokens"
    ],
    "ask": [
      "mcp__epsilon__check_order",
      "mcp__epsilon__place_dca_order",
      "mcp__epsilon__place_limit_order",
      "mcp__epsilon__place_market_order",
      "mcp__epsilon__place_stop_order",
      "mcp__epsilon__place_trailing_order"
    ],
    "deny": [
      "mcp__epsilon__cancel_order"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as epsilon. Review it before you use it.