Skip to main content
Glama
cryptolir

Hyperliquid

by cryptolir

AgentGlob Trader

CI

Open-source trading tools for AI agents. An MCP server and a set of agent skills that let an AI agent read markets and trade Hyperliquid perpetual futures — without ever holding a private key.

Built and used in production by AgentGlob.


The idea: the agent never holds the key

Most "AI trading bot" setups hand the model an API key and hope the prompt holds. This one does not.

   AI agent  ──►  MCP server  ──►  AgentGlob runtime  ──►  Hyperliquid
  (the model)    (this repo)      (keys, caps, signing)     (exchange)
     no key         no key          the only signer

The MCP server in this repo holds no credential and never contacts the exchange. It calls an authenticated runtime API, which owns the delegated trading key, enforces the owner's limits, and signs. The model's job is to ask — and every refusal is decided somewhere the model cannot reach.

Practical consequences:

  • A prompt injection cannot lift a limit. Caps live behind the API, not in the context window. An order over the cap comes back 403 order_cap_exceeded no matter how convincingly the model was asked.

  • There is no withdrawal path in the code at all. Not disabled by a flag — absent. No function builds one, so nothing can sign one. Funds cannot leave the account through these tools.

  • Trading uses a delegated key, not your wallet key. Hyperliquid's API wallets can sign orders for an account but cannot move funds off it.

Related MCP server: Hyperliquid MCP

What is here

mcp/hyperliquid/

The MCP server — 9 typed tools for market data, account reads, orders, leverage, funding and stablecoin conversion

skills/

Three agent skills: how to read the market, how to trade, and how to size a trade so it stays inside its limits

The tools

Tool

Does

hl_market_data

Mid prices, order book, candles, funding rates, perp metadata

hl_account

This agent's own positions, margin, balances, open orders, fills

hl_place_order

Limit order, long or short, with reduce-only and time-in-force

hl_cancel_order

Cancel one resting order by id

hl_set_leverage

Per-asset leverage, cross or isolated

hl_transfer

Move USDC from spot to perp so it can back a trade

hl_transfer_status

Reconcile an in-flight transfer against the exchange ledger

hl_swap

Convert USDH, USDT0 or USDE into USDC — never below $0.99

hl_account_status

Trading readiness: key present, approval valid, expiry

Account reads are always this agent's own account. There is no parameter for someone else's address; the server fills it in.

The skills are the interesting half

The MCP gives a model capability. The skills give it judgement — and most of what an agent gets wrong about trading is judgement, not syntax.

  • hyperliquid-monitor — reading the market and the account. Which number actually answers "how much is in there", why szi carries the direction in its sign, and why a shared rate limit means your polling loop is not yours alone.

  • hyperliquid-trading — placing and cancelling. Why ok: true does not mean the order is live, why there are no market orders, no stop-losses and no modify, and what every refusal code means.

  • hyperliquid-risk — sizing and leverage. Why every order costs its full size against the daily budget even if it never fills, why that means an agent can spend its whole allowance opening positions and then be unable to close them, and why liquidation distance is the one number worth reporting unprompted.

They are plain Markdown. Read them even if you never run this code — they document a lot of hard-won detail about agents and this exchange.

Using it

This repo has three parts, and each one travels differently:

Part

Works with other agents?

The skills

Yes, any agent. Plain Markdown that any skill-aware runtime can load.

The MCP server

Yes, any MCP client — Claude Code, Claude Desktop, Cursor, OpenClaw and others. It needs a backend to talk to.

AgentGlob's backend

Only for agents running on AgentGlob.

That last line is on purpose. AgentGlob's backend only accepts calls from the agents it hosts. If someone copies an agent's token onto a laptop, every call from there is refused. So a leaked token is useless to anyone else.

On AgentGlob (works out of the box)

AgentGlob gives an AI agent a persistent home: its own container, its own wallet, its own memory, and a dashboard where a human stays in charge of what it may do.

  1. Create an agent in the dashboard.

  2. Wallet tab → generate a wallet, then provision a Trading Key. The trading key is a Hyperliquid API wallet: it signs orders and cannot withdraw. Your wallet key never enters the agent's container.

  3. Set the caps — per-order size, daily total, maximum leverage, and which assets are allowed. The agent cannot change these and cannot read them.

  4. Tools tab → add the Hyperliquid MCP. Add the skills from the catalog.

The agent can now trade, inside limits you set, and you can watch every order and change the rules at any time — including switching trading off mid-position.

Every agent in a workspace can have it. Each one gets its own Trading Key and its own limits, so a cautious agent and an active one can sit side by side.

Skills in any agent

The skills are useful even without these tools: they teach an agent how Hyperliquid really behaves (see skills/).

Claude Code — copy them into your skills folder:

git clone https://github.com/cryptolir/AgentGlob-Trader
cp -r AgentGlob-Trader/skills/hyperliquid-* ~/.claude/skills/

Other runtimes — copy the three hyperliquid-* folders to wherever your runtime reads skills from. Each is a SKILL.md with the standard name and description frontmatter.

One thing to adapt: when something needs a human, the skills tell the agent to ask its owner to use the AgentGlob dashboard (the Wallet tab, for example). Elsewhere, that means whoever runs your backend.

The MCP server in any MCP client

The server needs Node 20 or newer, and two settings:

Setting

Value

AGENTGLOB_RUNTIME_URL

Your backend's address

AGENTGLOB_RUNTIME_TOKEN

The token your backend expects

Claude Code:

claude mcp add hyperliquid \
  -e AGENTGLOB_RUNTIME_URL=https://your-backend.example \
  -e AGENTGLOB_RUNTIME_TOKEN=your-token \
  -- npx -y github:cryptolir/AgentGlob-Trader

Claude Desktop, Cursor and most other clients take the same thing as JSON — Claude Desktop in claude_desktop_config.json (Settings → Developer → Edit Config), Cursor in ~/.cursor/mcp.json:

{
  "mcpServers": {
    "hyperliquid": {
      "command": "npx",
      "args": ["-y", "github:cryptolir/AgentGlob-Trader"],
      "env": {
        "AGENTGLOB_RUNTIME_URL": "https://your-backend.example",
        "AGENTGLOB_RUNTIME_TOKEN": "your-token"
      }
    }
  }
}

npx downloads the repo, builds it and starts the server. If a setting is missing, it stops at once with a message saying which.

The backend is yours to write. It is small — eight endpoints, all listed in mcp/hyperliquid/README.md. It is also where every safety rule lives: the key, the limits and the signing. Do not move them into the MCP server — the whole point is that the agent can reach the server, so the server cannot be the thing that protects you.

Or skip writing a backend: run the agent on AgentGlob.

From source

git clone https://github.com/cryptolir/AgentGlob-Trader
cd AgentGlob-Trader
npm install   # also builds, into dist/
npm test

npm start runs the server once the two settings are set.

The safety model, stated plainly

  • Caps are server-side. Per-order notional, daily notional, max leverage, asset allowlist. The agent cannot read them or raise them; an order that tries to set its own is refused as an attempt, not a typo.

  • An empty allowlist allows nothing. Absence is never permission.

  • Funding moves one direction only — spot to perp. Perp back to spot is not restricted, it is not built: there is no code that constructs it.

  • The one spot action is narrow by construction. hl_swap converts three hand-picked stablecoins into USDC and nothing else — it cannot buy a coin whose price moves. Its limit price is its floor, so it never sells below $0.99; a coin that has lost its $1 value simply does not sell. It reuses the ordinary order action, so it adds nothing new that a key could sign.

  • Mainnet only, small sizes. No paper mode. The safety comes from the caps and from position sizes a person chose, not from a sandbox.

What it still cannot protect you from

Worth saying out loud, because the skills say it to the agent too:

  • There is no stop-loss. Hyperliquid has no resting protective order here, and nothing closes a losing position while the agent is not looking.

  • An agent can lose money inside its caps. The caps bound the size of a mistake, not whether one happens.

  • Nothing here is financial advice, and the skills instruct the agent to refuse to give any.

Contributing

Issues and pull requests welcome — especially additional venues. The shape here (thin typed MCP + skills that carry the judgement + server-side caps) is meant to be reusable for other exchanges.

npm install builds and npm test runs the tests — the same checks run on every pull request.

License

Apache License 2.0 — see LICENSE.

Available Tools

9 tools
hl_accountA

Read this agent's own Hyperliquid account: perp positions and margin, spot balances, open orders, recent fills, or portfolio history. The address is always this agent's own bound wallet — it cannot be pointed at another account.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesWhich account read to perform.

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It strongly signals a read-only, non-mutating operation via 'Read' and discloses a meaningful ownership/authorization boundary (address is always the bound wallet, never a supplied one). It omits rate limits, data freshness, and any note on large result sets from fills/portfolio history.

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?

Two sentences, front-loaded with the resource and the returned data types, followed by the scope constraint. No filler and nothing buried.

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 single-enum, read-only tool with no output schema and no annotations, the description covers what to query and the ownership scope. It stops short of describing return shape or pagination behavior for potentially large reads like userFills and portfolio, which the missing output schema leaves unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description goes further by translating the enum values into user intent: perp positions/margin, spot balances, open orders, recent fills, portfolio history. Only 'userFees' lacks a plain-language mapping, so the mapping is strong but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Read) and resource (this agent's own Hyperliquid account) and enumerates the concrete data types retrievable: perp positions/margin, spot balances, open orders, fills, portfolio history. It implicitly separates itself from hl_market_data (account vs market), but offers no differentiation from the sibling hl_account_status, which is the closest competing tool.

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?

Clear context for when to reach for it (fetching the agent's own account reads) and an explicit when-not constraint: 'it cannot be pointed at another account.' No guidance is given on when to prefer hl_account_status over this tool, so the alternative-selection surface is incomplete.

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

hl_account_statusA

Trading readiness for this agent's own account: whether Hyperliquid is enabled, the Trading Key is present, the exchange still honours its approval, and when that approval expires. Use this to explain WHY an order might be refused, instead of discovering it from the refusal.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does most of it: it enumerates the four readiness signals returned, effectively substituting for a missing output schema, and frames the tool as a diagnostic read. It stops short of stating permissions, auth prerequisites, or that it has no side effects.

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?

Two sentences, both earning their place. The returned signals are front-loaded, and the second sentence adds the usage rationale without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No parameters, no annotations, and no output schema, so the description must convey both scope and return content, which it does by listing the four checks. An agent has everything needed to call it correctly and interpret the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the lack of input is appropriate for a self-account status check. Baseline 4 applies.

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?

States a specific resource (this agent's own account) and enumerates exactly what is checked: Hyperliquid enabled, Trading Key present, approval still honoured, approval expiry. The 'own account' scoping cleanly separates it from siblings like hl_account or hl_market_data.

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?

Gives an explicit condition for use: call it to explain WHY an order might be refused rather than waiting for the refusal. It does not name a sibling as the alternative or state when not to use it, but the intended context is unambiguous.

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

hl_cancel_orderA

Cancel one resting order by its order id (oid), which comes from hl_account with kind=openOrders.

ParametersJSON Schema
NameRequiredDescriptionDefault
oidYesOrder id from openOrders.
coinYesAsset symbol the order is on.

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It adds the useful constraint that the target must be a resting (open) order, but says nothing about required permissions, irreversibility, what happens to partially filled orders, or what the call returns on success/failure.

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?

A single sentence with the action front-loaded and zero filler; the descriptive clause about oid source earns its place by resolving the required input.

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 simple two-parameter cancel tool with fully documented schema and no output schema, the description supplies what an agent needs to call it: the action, its single-order scope, and the source of the oid. Only the mutation's side effects and failure behavior are left unaddressed.

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 coverage is 100%, so both parameters are already documented in the schema, and the annotation-free description adds only the provenance of oid (openOrders) on top of that. Baseline 3 is appropriate when the schema does the heavy lifting.

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?

States a specific verb (cancel) and resource (one resting order), plus scopes it to a single order rather than a bulk operation, which cleanly separates it from hl_place_order. The reference to the oid's origin further pins down exactly what entity it operates on.

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?

The description tells the agent where the required oid comes from (hl_account with kind=openOrders), which is real usage guidance for invoking it correctly. It stops short of naming when not to use it or any alternative route, so it is clear context rather than full when/when-not guidance.

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

hl_market_dataA

Read Hyperliquid market data: mid prices, the order book, candles, or perp metadata (asset list, size precision, max leverage). No account access, no signing.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinNoAsset symbol, e.g. BTC. Required for l2Book, candleSnapshot, fundingHistory.
kindYesWhich market read to perform.
endTimeNoEpoch ms, optional.
intervalNoCandle interval, e.g. 1m, 15m, 1h, 1d. Only for candleSnapshot.
startTimeNoEpoch ms. Only for candleSnapshot / fundingHistory.

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 full burden and does disclose two meaningful traits: read-only nature and no auth/signing required. However, it says nothing about rate limits, pagination, defaults, or the shape of the returned data, so behavioral coverage is partial.

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?

A single front-loaded sentence lists the reads, and the trailing clause captures the read-only constraint. Every phrase earns its place with no filler.

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 read-only, no-output-schema tool the description covers the essential kinds and the safety profile, which is enough to invoke it correctly. Minor gaps remain around return format and per-kind parameter defaults, but these are lower-stakes here.

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%, so every parameter (coin, kind, startTime, endTime, interval) is already documented in the schema. The description's data-kind enumeration loosely maps to the `kind` enum but adds no syntax or format detail beyond what the schema provides — the baseline 3 for high coverage.

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?

States a specific verb ("Read") plus resource ("Hyperliquid market data") and enumerates the concrete reads available: mid prices, order book, candles, perp metadata. This clearly distinguishes it from the account/trading siblings (hl_place_order, hl_account, hl_transfer), which an agent can tell apart at a glance.

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?

"No account access, no signing" establishes a scope boundary that separates this from account and order tools, so the agent knows this is the read-only market surface. It stops short of naming explicit alternatives (e.g. "use hl_account for balances"), so it's clear context rather than full when/when-not routing.

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

hl_place_orderA

Place a limit order on Hyperliquid. Subject to owner-set limits: per-order and daily notional caps, a maximum leverage, and an asset allowlist. Exceeding a limit returns 403 with a cap_* code — do not retry or attempt to work around it. Hyperliquid has no market order: to cross the spread, send an aggressive limit price and accept the slippage explicitly.

ParametersJSON Schema
NameRequiredDescriptionDefault
pxYesLimit price. Rounded server-side to the asset's tick rules.
szYesSize in units of the asset (not USD).
tifNoTime in force. Default Gtc.
coinYesAsset symbol, e.g. BTC. Must be in the agent's allowlist.
isBuyYestrue to buy/long, false to sell/short.
reduceOnlyNoOnly reduce an existing position. Default false.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the owner-set constraint regime (per-order and daily notional caps, max leverage, allowlist) and the exact failure semantics (403 + cap_* code, no retry). It omits auth requirements and what a successful response contains, keeping it short of 5.

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?

Three sentences, all load-bearing: the core action, the constraint/failure behavior, and the market-order workaround. Front-loaded with no filler.

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 write tool with no annotations and no output schema, it covers the critical traps (limits, error code, no-retry, no market orders). The main remaining gap is the success response shape and any auth prerequisite, which the agent would have to discover empirically.

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%, so all six parameters including the tif enum and reduceOnly are already documented inline. The description adds only the conceptual point that an aggressive px crosses the spread, which is marginal beyond the schema baseline of 3.

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?

Opens with a specific verb+resource ('Place a limit order on Hyperliquid') and implicitly distinguishes itself from siblings like hl_cancel_order and hl_swap. An agent immediately knows this is the order-entry tool.

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?

Gives strong operational guidance: exceeding owner limits returns 403 with a cap_* code and must not be retried, and it explains how to emulate a market order since none exists. It does not explicitly route to sibling tools, but the when/when-not for this tool is clear.

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

hl_set_leverageA

Set leverage for one asset. Bounded by the owner-set maximum; a higher value returns 403 leverage_exceeded. Raising leverage raises liquidation risk on any open position.

ParametersJSON Schema
NameRequiredDescriptionDefault
coinYesAsset symbol.
isCrossNotrue for cross margin (default), false for isolated.
leverageYesRequested leverage, e.g. 3.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the owner-set maximum constraint, the specific 403 leverage_exceeded failure mode, and the consequence that raising leverage increases liquidation risk on open positions. It stops short of stating auth requirements or whether existing positions are immediately re-margined.

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?

Three short sentences, front-loaded with purpose, then constraint/error, then risk. Every sentence carries distinct information and there is no padding or redundancy.

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 mutation tool with no annotations and no output schema, the description supplies the key risk and error context an agent needs. It leaves minor gaps around authentication/prerequisites and the effect on already-open positions, but the core contract is covered.

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%, so the schema already documents coin, isCross, and leverage, making 3 the baseline. The description adds only indirect meaning ('for one asset', 'higher value' raising liquidation risk) and does not explain the cross/isolated choice or valid leverage granularity beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Set leverage for one asset'), which is unambiguous against siblings like hl_place_order or hl_cancel_order that operate on orders rather than leverage settings. It never explicitly contrasts itself with a sibling, so it falls short of the top tier, but no sibling overlaps this resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Bounded by the owner-set maximum; a higher value returns 403 leverage_exceeded' gives a precondition and failure boundary, which implies usable ranges. However, there is no guidance on when to call this versus hl_place_order, whether leverage can be changed while a position is open, or whether it applies per-asset or per-symbol pair.

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

hl_swapA

Convert a stablecoin held on the spot side — USDH, USDT0 or USDE — into USDC, so it can back perp trades. Only those three coins, only into USDC, and never below 0.99 USDC per coin: if no buyer pays that much, nothing sells. This is not spot trading and cannot buy any other coin. Minimum 11 (at the 0.99 floor that clears the exchange minimum of $10). It can fill partly — report soldSz and usdcReceived, not the amount asked for. Counts against the owner-set daily limit; only what actually sold is charged.

ParametersJSON Schema
NameRequiredDescriptionDefault
fromYesThe stablecoin to convert into USDC.
amountYesHow many coins to convert, e.g. 123.27. Minimum 11.

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations present, the description carries the full burden and does so: it discloses the 0.99 USDC price floor and the all-or-nothing-per-coin behavior at that floor, partial fills, the fact that the sold amount (not the requested amount) is what gets charged against the owner daily limit, and the effective $10 exchange minimum. It also names the return fields (soldSz, usdcReceived) despite there being no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core conversion and only slightly bloated by em-dash asides; every clause (coins allowed, floor, partial fills, limit charging) carries operative information rather than filler. Denser than ideal, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with no annotations and no output schema, the description supplies everything an agent needs: allowed inputs, target asset, price floor, minimum size, partial-fill handling, and which fields to read back. No material gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the enum and amount semantics are already documented and the baseline is 3. The description adds real meaning beyond the schema by explaining why the minimum is 11 (it reflects the exchange's $10 floor at the 0.99 price) and by tying 'amount' to the partial-fill behavior where requested vs. received can differ.

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?

States a specific verb (convert) and resource (a stablecoin on the spot side) into a specific output (USDC) for a specific purpose (backing perp trades). It explicitly distinguishes itself from sibling operations by saying 'This is not spot trading and cannot buy any other coin,' so an agent can route between hl_swap and hl_place_order without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both when-to-use (to turn spot stablecoins into perp collateral) and hard when-not constraints: only USDH/USDT0/USDE, only into USDC, never another coin, not spot trading. Alternatives are implicitly routed away from this tool and no prerequisite ambiguity remains.

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

hl_transferA

Move USDC from the spot account into the perp account so it can back trades. This is the ONLY direction — perp-to-spot does not exist here, deliberately. Amount is whole US dollars (no cents: the dashboard sets the cents as a tracking tag and sends slightly less than requested). One transfer at a time per account; if one is unresolved, reconcile with hl_transfer_status before retrying. Bounded by the owner-set daily limit.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesWhole US dollars to move, e.g. 20. Minimum 5.
directionYesOnly spot_to_perp exists.

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it discloses the single-direction constraint, whole-dollar granularity with the dashboard's cents-as-tracking-tag quirk (which explains why slightly less than requested is sent), a one-transfer-at-a-time concurrency rule, the reconciliation path for an unresolved transfer, and the owner-set daily limit. These are non-obvious operational traits an agent could not infer from the schema.

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?

Five short sentences, zero filler, and the core action plus direction constraint are front-loaded before the operational caveats. Every sentence conveys a distinct, necessary fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, so the description must stand alone for a 2-parameter mutation, and it does: direction limits, amount semantics, concurrency, failure reconciliation, and the daily cap are all covered. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds genuine meaning beyond the schema by explaining why amounts are whole dollars and why the executed amount may be lower than requested, which prevents a false 'transfer failed' conclusion. It stops short of adding new syntax or format detail.

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?

States a specific verb, resource, and direction: 'Move USDC from the spot account into the perp account so it can back trades.' It explicitly negates the reverse direction ('perp-to-spot does not exist here, deliberately'), so an agent can distinguish it from hl_swap or hl_transfer_status without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use rationale (to back trades), an explicit exclusion (no perp-to-spot), a routing rule to a named sibling ('reconcile with hl_transfer_status before retrying'), and a constraint (daily limit). This is the full when/when-not/alternative triad.

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

hl_transfer_statusA

Reconcile the account's in-flight transfer against the exchange ledger: reports landed, still-pending (with whether a retry is allowed yet), or blocked (an owner must clear a double-land).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose meaningful behavior: the three possible outcomes (landed, pending with retry eligibility, blocked requiring an owner to clear a double-land), which is a real business rule not derivable from any structured field. It stops short of stating read-only nature explicitly or any auth/rate-limit constraints.

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?

A single sentence, front-loaded with the verb and resource, then the outcome enumeration in a compact parenthetical. Every clause earns its place; nothing is padded.

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?

With zero parameters and no output schema, the description usefully compensates by describing the returned states themselves. It is nearly complete for a status tool, missing only explicit read-only framing and any mention of what is needed to identify the transfer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. The description correctly implies the account scope is implicit rather than passed as an argument, and adds no misleading parameter expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it reconciles/reports the status of the account's in-flight transfer against the exchange ledger, and enumerates the three result states. It is clearly distinguishable from siblings like hl_transfer (initiates) and hl_account_status (broader account state), though it does not name any sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: 'in-flight transfer' and 'reconcile' signal this is a post-transfer verification call, most naturally after hl_transfer. However, there is no explicit when-to-use/when-not statement, no mention of the alternative (hl_account_status) and no statement of prerequisites or ordering.

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.

  1. 9 tool updatesv0.1.0
    • First observedhl_account
    • First observedhl_account_status
    • First observedhl_cancel_order
    • First observedhl_market_data
    • First observedhl_place_order
    • First observedhl_set_leverage
    • First observedhl_swap
    • First observedhl_transfer
    • First observedhl_transfer_status

TDQS

A4.1/5.0

Scored across 9 tools

Disambiguation4/5

Each tool targets a distinct action (read market, read account, place, cancel, leverage, transfer, swap, status). The only mild overlaps are the paired read/write tools (hl_account vs hl_account_status, hl_transfer vs hl_transfer_status), but descriptions clearly differentiate them, so confusion is unlikely.

Naming Consistency4/5

All tools use a consistent hl_ prefix and snake_case, mostly verb_noun (hl_place_order, hl_cancel_order, hl_set_leverage). A few are noun-only or noun_status (hl_account, hl_market_data, hl_swap, hl_account_status), a minor deviation from the pattern.

Tool Count5/5

Nine tools is well-scoped for a trading server: reads, order management, leverage, funding movement, and readiness checks, with each tool earning its place. No redundant or filler tools.

Completeness4/5

Covers the core trading lifecycle: market data, account reads, place/cancel orders, leverage, transfers, swap, and status. Minor gaps like an amend/modify order, cancel-all, or direct order-status-by-id (only open-orders listing exists) are workable but slightly incomplete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A Model Context Protocol (MCP) server for the Hyperliquid decentralized exchange, enabling AI assistants to perform trading operations, manage accounts, and retrieve market data.
    19 PyPI
    3
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables natural language control of Hyperliquid perpetual futures, including querying positions, prices, orderbook, and executing trades like market and limit orders, all from MCP-compatible clients.
    13
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Hyperliquid perpetual DEX with 48 tools for trading, monitoring, risk management, and security. Enables real-time market data, order management, risk validation, and automated trading strategies.
    -
  • A
    license
    A
    quality
    B
    maintenance
    A read-only MCP server for querying Hyperliquid perp markets, funding rates, order books, candles, and account positions/fills/funding for any address, without needing API keys or wallets.
    8
    43 npm
    1
    MIT