Hyperliquid
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Hyperliquidshow my open perp positions and current BTC funding rate"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AgentGlob Trader
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 signerThe 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_exceededno 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
The MCP server — 9 typed tools for market data, account reads, orders, leverage, funding and stablecoin conversion | |
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 |
| Mid prices, order book, candles, funding rates, perp metadata |
| This agent's own positions, margin, balances, open orders, fills |
| Limit order, long or short, with reduce-only and time-in-force |
| Cancel one resting order by id |
| Per-asset leverage, cross or isolated |
| Move USDC from spot to perp so it can back a trade |
| Reconcile an in-flight transfer against the exchange ledger |
| Convert USDH, USDT0 or USDE into USDC — never below $0.99 |
| 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", whyszicarries the direction in its sign, and why a shared rate limit means your polling loop is not yours alone.hyperliquid-trading— placing and cancelling. Whyok: truedoes 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.
Create an agent in the dashboard.
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.
Set the caps — per-order size, daily total, maximum leverage, and which assets are allowed. The agent cannot change these and cannot read them.
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 |
| Your backend's address |
| 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-TraderClaude 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 testnpm 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_swapconverts 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 toolshl_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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which account read to perform. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| oid | Yes | Order id from openOrders. | |
| coin | Yes | Asset symbol the order is on. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | No | Asset symbol, e.g. BTC. Required for l2Book, candleSnapshot, fundingHistory. | |
| kind | Yes | Which market read to perform. | |
| endTime | No | Epoch ms, optional. | |
| interval | No | Candle interval, e.g. 1m, 15m, 1h, 1d. Only for candleSnapshot. | |
| startTime | No | Epoch ms. Only for candleSnapshot / fundingHistory. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| px | Yes | Limit price. Rounded server-side to the asset's tick rules. | |
| sz | Yes | Size in units of the asset (not USD). | |
| tif | No | Time in force. Default Gtc. | |
| coin | Yes | Asset symbol, e.g. BTC. Must be in the agent's allowlist. | |
| isBuy | Yes | true to buy/long, false to sell/short. | |
| reduceOnly | No | Only reduce an existing position. Default false. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| coin | Yes | Asset symbol. | |
| isCross | No | true for cross margin (default), false for isolated. | |
| leverage | Yes | Requested leverage, e.g. 3. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | The stablecoin to convert into USDC. | |
| amount | Yes | How many coins to convert, e.g. 123.27. Minimum 11. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Whole US dollars to move, e.g. 20. Minimum 5. | |
| direction | Yes | Only spot_to_perp exists. |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v0.1.0- First observed
hl_account - First observed
hl_account_status - First observed
hl_cancel_order - First observed
hl_market_data - First observed
hl_place_order - First observed
hl_set_leverage - First observed
hl_swap - First observed
hl_transfer - First observed
hl_transfer_status
TDQS
Scored across 9 tools
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.
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.
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.
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
Related MCP Connectors
No-KYC managed MCP for AI agents: sandboxed TypeScript trading SDK, isolated sub-accounts, futures.
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for Mudrex futures trading enabling AI agents to securely access data and risk tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol (MCP) server for the Hyperliquid decentralized exchange, enabling AI assistants to perform trading operations, manage accounts, and retrieve market data.19 PyPI3MIT
- AlicenseAqualityCmaintenanceEnables 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.13MIT
- FlicenseNot gradedqualityCmaintenanceMCP 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.-
- AlicenseAqualityBmaintenanceA 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.843 npm1MIT