dreamDEX Perps MCP
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., "@dreamDEX Perps MCPshow my dreamDEX account and the current BTC perp market"
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.
dreamDEX Perps MCP
An MCP server that lets AI agents trade dreamDEX perpetuals.
Ready configs ship in this repo for the agent harnesses people already
use: Claude Code, Claude Desktop, OpenCode, OpenAI Codex, ZCode, and
Cursor, plus a generic mcpServers template that also fits Windsurf,
Gemini CLI, Cline, and any other MCP client. Connect one of them to
dreamDEX perps on the Somnia Hideki testnet and the agent can read
markets, inspect a portfolio, and place real on-chain orders through
plain tool calls. Per-harness setup is under
MCA below.
Built for the dreamDEX Perps Builder Bounty (MVP track).
Why
dreamDEX is built for the agentic era: the order book is on-chain, the APIs
are open, and agents are first-class participants. What was missing is a
standard, safe way for an LLM agent to actually use the perps book. MCP
(Model Context Protocol) is that standard. This server wraps the official
@somnia-chain/markets-sdk (v0.32.1, the version the dreamDEX app runs)
and exposes a small, auditable tool surface with guardrails an agent
cannot talk its way around.
Related MCP server: limitless-mcp
An autonomous agent, not another trading bot
Conventional trading bots are automation. A programmer decides the strategy in advance, the code repeats it forever, and nothing in the system can decide that today is a bad day to trade. Change the behavior and you rewrite and redeploy code.
This project is built the other way around. The server ships no strategy at all. It gives an AI agent a set of guarded tools, and the agent decides: it studies the market, argues both sides of the trade, sizes the position, and can walk away. In live sessions with this build, the agent's own risk team and portfolio manager have rejected trades that a rule-based bot would have taken without a second thought.
Risk routines work the same way. Take-profit and stop-loss watching, margin guarding, funding plays: none of these are baked in as fixed code paths. They are standing instructions to the agent, changed in plain language, and the agent can weigh context a rigid strategy cannot, like closing early because funding flipped hard against the position before the stop was ever touched.
Conventional strategy bot | This project | |
Who decides | The programmer, months earlier, in code | The agent, per session, from live data |
Refusing a trade | Not a concept that exists | The risk team and PM can and do reject |
Changing behavior | Edit code, redeploy | Change the instruction |
Judgment inputs | One strategy's signals | An analyst team: funding and open interest, technicals, news, sentiment |
Risk routines | Hard-coded per strategy | Standing instructions the agent executes and adapts |
Interface | CLI, config files, logs | Any MCP client, plus a visual Trading Desk |
The signing key | Usually holds the funds it trades | Holds nothing in trading-key mode: trades for your account, cannot withdraw |
What's inside
The MCP server. Seven tools (below) over the official markets SDK: markets, account state, voucher claim, and guarded order placement, cancellation and closing.
Trading-key mode. Link a bot key to your DreamDEX account in the app
(wallet, Link a bot, Perps), set OWNER_ADDRESS, and the server trades
for the account through the pool's placeOrderFor entrypoint, the same
pattern as the official bot kit. Margin locks from the account, fills
settle to the account, and the key pays STT gas only. The key holds no
funds and cannot withdraw, and it works with the 1,000 USDso perps credit
sitting in the account, which can never be transferred to a bot wallet
because it is perps margin, not spot funds.
The agent team. A reference crew that runs on top of the tools: a Market Analyst (funding, open interest), a Technical Analyst (candles, RSI, MACD), news and sentiment readers, a Bull and a Bear that debate the trade in the open, a Trader that posts a sized proposal, a Risk Team with three stances (aggressive, neutral, conservative), and a Portfolio Manager with the final call.
The Trading Desk. A visual front end (npm run ui) with a live BTC
chart and TradingView-style drawing tools, the debate streamed as it
happens, an order ticket with margin and projected ROE, and a position
panel whose ROE tracks the live mark tick by tick. Paper mode runs the
full session on live market data with nothing sent on-chain.
Tools
Tool | Type | What it does |
| read | All live perp markets: pool, margin bank, tick/lot, min size, max leverage |
| read | One market by symbol (BTC, ETH, SOL, …) |
| read | Open orders, recent fills, open positions, margin account, voucher eligibility |
| write | Claim the one-time 1,000 paper USDso perps credit |
| write | Limit or market (IOC) perp order, pre-checked and capped |
| write | Cancel a resting order by id |
| write | Flatten a whole position with one opposite IOC order |
In trading-key mode (OWNER_ADDRESS set), the write tools act on the
linked account instead of the key's own account: place_order verifies
the pool's operator grant first, pre-flights against the account's
margin, and sends placeOrderFor; cancel_order and close_position
follow the same path.
Safety model
An agent with a signing key is a loaded weapon, so the server is built defensive by default:
Read-only unless you say otherwise. No
PRIVATE_KEY→ no signing at all. Key present butTRADING_ENABLEDunset → write tools still refuse.Hard notional cap. Every order is rejected if its USD value exceeds
MAX_ORDER_NOTIONAL_USD(default $50). The cap is enforced in code, not in a prompt.Exchange-side pre-flight. Before sending, each order is checked with the SDK's
getMaxPerpOrderSize, the same check the dreamDEX app runs, so margin, position caps and voucher allowlists are respected instead of discovered via reverts.A key that holds nothing. In trading-key mode the signing key is a linked bot key: it can place, cancel and reduce orders for the account and pay gas, and that is all. Funds stay in the account, fills settle to the account, and withdrawal is not something the key can do.
Exact sizing. Quantities and prices are rounded to the market's own
lotSize/tickSize, and per-market decimals (6–24 on the base side!) are read from the market row, never assumed.Testnet only. The server is wired to the Hideki testnet chain (chain id 50383) and paper USDso. There is no mainnet switch.
Quick start
git clone https://github.com/agasavenue17/dreamdex-perps-mcp
cd dreamdex-perps-mcp
npm install
cp .env.example .env # fill in PRIVATE_KEY if you want trading enabled
npm run build
npm startVerify the wiring without any key (talks to the live testnet indexer):
node scripts/smoke.mjsUse it from an MCP client
{
"mcpServers": {
"dreamdex-perps": {
"command": "node",
"args": ["/path/to/dreamdex-perps-mcp/dist/index.js"],
"env": {
"PRIVATE_KEY": "0x…your-testnet-key…",
"TRADING_ENABLED": "true",
"MAX_ORDER_NOTIONAL_USD": "50",
"OWNER_ADDRESS": "0x…your-dreamdex-account, if the key is a linked bot key…"
}
}
}
}MCA: plug into the harness you already use
People do not need another app to try this. They need it inside the agent harness they already open every day. MCA ships a ready config for each of the popular ones, with the path to this checkout filled in for you:
npm run mca -- claude # Claude Code and Claude Desktop
npm run mca -- opencode # OpenCode (opencode.json)
npm run mca -- codex # OpenAI Codex (~/.codex/config.toml)
npm run mca -- zcode # ZCode (~/.zcode/cli/config.json)
npm run mca -- cursor # Cursor, Windsurf, Gemini CLI, Cline, generic mcpServers clientsStatic templates live in configs/ if you prefer to copy by
hand: claude.mcp.json, opencode.json, codex.config.toml, and
zcode.config.json, with the generic template covering Cursor and the
other mcpServers clients. Every variant starts the same stdio server;
only the config shape differs, because that is the only thing that
differs between harnesses.
Run with Docker
docker build -t dreamdex-perps-mcp .
docker run -i --rm \
-e PRIVATE_KEY=0x… \
-e TRADING_ENABLED=true \
-e OWNER_ADDRESS=0x… \
dreamdex-perps-mcpThe server speaks MCP over stdio, so run it with -i, or point your MCP
client at the docker run command directly. Configuration is environment
variables only; see .env.example.
Then ask your agent things like:
"List the perp markets and show me BTC's max leverage."
"What's my account state? Any open positions?"
"Open a $20 long on BTC at market."
Getting testnet funds
STT for gas: sign in at app.testnet.dreamdex.io, use Link a Bot with your key's address, and use Send it … for gas / Top up. A perp order costs roughly 0.0003–0.003 STT in gas.
Paper USDso: with a fresh wallet (no positions or orders), call the
claim_vouchertool once to receive the 1,000 USDso perps credit. Note the credit can only open positions in the markets on its allowlist.
How it works
AI agent ──MCP (stdio)──> this server ──> @somnia-chain/markets-sdk ──> Somnia Hideki testnet
│ ├─ Indexer (GraphQL): markets, portfolio
└─ trader (viem signer) └─ PerpPool contracts: orders settle on-chainReads go through the unified Somnia Markets indexer; writes are signed
locally and sent straight to the perp pool contracts, where fills settle
atomically on-chain. In trading-key mode the writes go to the pool's
placeOrderFor / cancelOrderFor entrypoints (the markets SDK has no
…For writes, so those calls are sent with viem, mirroring the official
bot kit) after a read of the pool's operator registry confirms the
link. Every placement returns the transaction hash and decoded fills,
so an agent's work is verifiable in the
testnet explorer.
Network reference
Chain | Somnia Hideki testnet (id |
RPC |
|
Indexer |
|
MarginBank |
|
Collateral | USDso (paper, via voucher) |
Running behind a proxy
The SDK talks to the chain over a raw WebSocket and has no HTTP fallback,
so networks that force traffic through an HTTP(S) proxy break its chain
reads (genesis check failed). If that is your environment, run the
bundled bridge and point the server at it:
node scripts/ws-bridge.mjs # ws://127.0.0.1:8787/ws -> Hideki, via HTTPS_PROXY
WS_RPC_URL=ws://127.0.0.1:8787/ws npm startLicense
MIT
Available Tools
7 toolscancel_orderA
Cancel a resting perp order by its order id (see get_account for open orders).
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Base symbol of the market, e.g. BTC | |
| orderId | Yes | uint128 order id, decimal string |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. 'Resting' usefully implies only open/unfilled orders can be cancelled, which is real behavioral signal, but there is no mention of what happens on an already-filled or nonexistent order, whether cancellation is irreversible, or any permission requirements.
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 and identifier front-loaded and a parenthetical pointer at the end. Nothing is redundant or 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?
For a two-parameter mutation with no annotations and no output schema, the description covers the happy path adequately — how to find the id and what gets cancelled — but leaves outcome and failure semantics unspecified.
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% with strong per-property descriptions (base symbol example 'BTC', 'uint128 order id, decimal string'), so the schema already does the heavy lifting. The description only restates that the order is identified by its id, adding no format or validation detail 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 concrete verb (cancel) plus a precise resource (resting perp order) and identifies the keying parameter (order id). The word 'resting' also implicitly separates it from close_position, though it never names that 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?
Gives an actionable workflow pointer — 'see get_account for open orders' — which tells the agent where the orderId comes from. It stops short of stating exclusions or when to prefer close_position over cancel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_voucherA
Claim the one-time 1,000 paper USDso perps credit for the server wallet (testnet play money). Only works if the wallet holds no perp positions or orders.
| 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 burden and does real work: it reveals this is a one-time, non-repeatable mutation, specifies the credit amount, and flags the state precondition (no open positions or orders) that causes failure. It stops short of saying how failure surfaces (error vs. silent no-op) or what the call returns, which matters for a write with 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?
Two sentences, both load-bearing: the first defines the action and reward, the second defines the gate. The most decision-relevant facts (one-time, amount, precondition) are 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 zero-parameter mutation with no annotations and no output schema, the description supplies what an agent needs to decide whether to call it: what it grants, that it is single-use, and the blocking state condition. Minor gap: no hint about the result (transaction hash, balance change) or how a rejected claim is reported.
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 the baseline is 4. The description correctly implies nothing is passed in — the wallet is fixed as the server wallet — leaving no parameter ambiguity.
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 concrete verb (claim), the exact resource and amount (one-time 1,000 paper USDso perps credit), the target (server wallet) and environment (testnet play money). No sibling tool performs anything resembling a credit claim, so it is unambiguously separable from list_markets, get_account, place_order, etc.
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 precondition that also functions as a when-not-to-use rule: 'Only works if the wallet holds no perp positions or orders.' No alternative tool is named, but there is no plausible substitute action here, so the guidance is operationally complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_positionA
Close the server wallet's entire position in one market with an opposite-side IOC market order sized exactly to the open position.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Base symbol, e.g. BTC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description still discloses the meaningful mechanics: it is a market order (so price impact/slippage applies), it is IOC (won't rest on the book), it hits the server wallet specifically, and the size is derived rather than supplied. It does not state required permissions, what happens if the position is zero, or how a residual after partial IOC fill is handled.
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?
One front-loaded sentence that states scope, mechanism, order type, time-in-force, and sizing rule with zero padding. Nothing to trim and nothing reordered.
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 mutating trading tool with no annotations and no output schema, the description covers the mechanism well but omits failure/no-position behavior, permissions, and what the response contains (fill price/quantity, residual position after a partial IOC fill). Those gaps matter for an agent deciding whether to invoke it.
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?
Single parameter with 100% schema coverage, so the schema already explains symbol as the base symbol. The description only adds that the symbol identifies the single market whose position is closed, which is minimal but consistent; baseline 3 applies 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?
A specific verb and resource ("Close ... entire position in one market") plus the exact mechanism: an opposite-side IOC market order sized to the open position. This distinguishes it from the generic place_order/cancel_order siblings without needing to open their schemas.
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 by the name and description — you call it to flatten an existing position rather than to open or partially adjust one. There is no explicit when-to-use vs. place_order guidance and no stated preconditions (e.g. behavior when no position exists), so the agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountB
Full perp account snapshot for an address (defaults to the server wallet): open orders, recent fills, open positions, margin account and paper-USDso voucher eligibility.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | Account address; defaults to the configured wallet |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the full burden; it usefully discloses the default server-wallet behavior and the categories of data returned. However, it does not explicitly state read-only semantics, permission requirements, freshness, or error behavior.
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?
It is a single front-loaded sentence that immediately identifies the resource and then enumerates returned data. There is no wasted framing or redundant text.
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 one-parameter read tool with no output schema, the description is nearly complete because it names the returned data categories and the default address behavior. It could be strengthened with explicit read-only or freshness/limit context, but no critical calling information 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?
There is one optional parameter and the schema description coverage is 100%, including the same default-wallet behavior. The description reinforces the default but adds no syntax, formatting, or validation details 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?
The description states a specific resource and scope: a full perp account snapshot for an address, defaulting to the server wallet. It clearly distinguishes this from market or order-action siblings by enumerating account-centric contents, though it does not explicitly name sibling tools.
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?
It implies usage by listing what the snapshot includes, but gives no explicit guidance on when to call this instead of siblings like claim_voucher or list_markets. There are no when-not conditions or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketA
Get one perp market by base symbol (e.g. BTC, ETH, SOL): pool, tick/lot sizes, min quantity, margin and leverage.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Base symbol, e.g. BTC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses the kinds of values returned (pool, tick/lot sizes, min quantity, margin, leverage) but does not state read-only behavior, error handling for invalid symbols, or authentication requirements.
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 with zero waste. It states the action, the key parameter, and the useful returned fields compactly.
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 one-parameter read tool with no output schema, the description gives enough detail about what the returned market record contains. Minor gaps around invalid-symbol behavior and exact response shape remain, but the essential information is present.
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 single symbol parameter is already documented with an example. The description reinforces that it is a base symbol and adds ETH/SOL examples, but does not add format or validation semantics 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: get one perp market by base symbol. The scope 'one' and the listed returned fields distinguish it clearly from list_markets without needing to name the sibling.
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 makes the usage condition clear: look up a single perp market by base symbol. It does not explicitly say when to use list_markets instead or what happens for unknown symbols, so it stops short of 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.
list_marketsA
List all dreamDEX perpetual markets live on the Somnia Hideki testnet, with pool addresses, margin requirements and order-size rules.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does useful work by previewing the payload (pool addresses, margin requirements, order-size rules) in the absence of an output schema, and 'List' implies a safe read. It does not state auth requirements, testnet-only limitations, or whether results are paginated.
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 with no filler: scope, environment, and payload contents in one pass.
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 zero-param read tool with no output schema and no annotations, the description supplies the environment context and the shape of the returned data. Only operational details such as pagination or testnet constraints are 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?
The tool takes zero parameters, so the schema baseline of 4 applies; there is nothing further the description could clarify about inputs.
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 ('List all dreamDEX perpetual markets') plus the environment (Somnia Hideki testnet) and the returned fields. The plural 'all markets' implicitly contrasts with the singular sibling get_market, though it never names that alternative.
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 scope 'all ... markets' versus get_market's single-market retrieval is implied by naming and the sibling list, but there is no explicit when-to-use guidance, prerequisites, or exclusion. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_orderA
Place a perp order on dreamDEX testnet for the server wallet. Guarded: trading must be enabled, notional is capped by MAX_ORDER_NOTIONAL_USD, quantity/price are rounded to the market's lot/tick, and the order is pre-checked with getMaxPerpOrderSize before sending.
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | long = buy/bid, short = sell/ask | |
| type | Yes | market = IOC order priced through the book with slippage | |
| price | No | Limit price in USD per whole base. Required for limit orders. | |
| symbol | Yes | Base symbol, e.g. BTC | |
| quantity | Yes | Order size in whole base units, e.g. '0.001' BTC |
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 it well: it discloses the execution guards (trading enabled, MAX_ORDER_NOTIONAL_USD notional cap), that quantity/price are silently rounded to the market's lot/tick, and that a getMaxPerpOrderSize pre-check happens before submission. Gaps remain on failure behavior and what is returned on success or rejection.
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?
The action and target lead the sentence, followed by the guard list as a compact enumeration. Every clause supplies a distinct operational fact — no restatement of the tool name, 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 state-mutating tool with no annotations and no output schema, the description covers environment, signer, preconditions, rounding, and a pre-check. It stops short of describing the result shape or how rejections surface, which is the one thing left unstated for a mutation tool.
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, but the description adds real meaning beyond the schema: submitted quantity/price may be adjusted to lot/tick increments and the effective size is bounded by a notional cap. Those facts change what values an agent should pass, which is exactly what parameter prose should add.
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 ('Place a perp order') plus two scoping facts an agent needs: dreamDEX testnet and the server wallet as signer. None of the siblings (list_markets, get_market, get_account, cancel_order, close_position, claim_voucher) can be confused with this action, so differentiation is achieved without naming one.
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 the precondition that selects this tool ('trading must be enabled') and an environmental constraint (testnet, server wallet) that tells the agent who is trading. It does not name alternatives for exiting or unwinding exposure (close_position, cancel_order) or say when not to place an order, so it falls short of a 5.
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.
7 tool updates
v0.1.0- First observed
cancel_order - First observed
claim_voucher - First observed
close_position - First observed
get_account - First observed
get_market - First observed
list_markets - First observed
place_order
TDQS
Scored across 7 tools
Each tool targets a clearly distinct action: market listing vs single-market lookup, account snapshot, voucher claim, and three unmistakable order operations (place, cancel, close). There is no ambiguous overlap between any pair.
All seven tools follow a strict verb_noun snake_case convention (list_markets, get_market, get_account, claim_voucher, place_order, cancel_order, close_position). The pattern is uniform and predictable throughout.
Seven tools is well-scoped for a perps trading server, covering market data, account state, funding, and core order actions without bloat. Every tool earns its place with a distinct role.
Core lifecycle is covered: market discovery, account/position reads, order placement, cancellation, and position closing. Minor gaps remain—no order-modify/amend tool and no explicit leverage-adjustment tool despite leverage being central to perps.
Maintenance
Related MCP Connectors
Non-custodial DeFi tools for AI agents on Solana: swaps, perps, lending, staking, equities.
OpenFinance gives any AI agent easy trading across every major market through one hosted MCP server. Trade crypto spot and perpetuals on Hyperliquid with market, limit and TWAP orders, leverage and margin control. Trade stocks, indices, commodities, forex and pre-IPO names as Hyperliquid HIP-3 perps. Trade Polymarket prediction markets with odds, order books, positions, PnL and trader leaderboards. Swap and bridge across 40+ EVM chains and Solana with Relay and Jupiter, find memecoins across 200+ chains, launch tokens on Robinhood Chain and Solana, and buy crypto with card, bank or UPI. Write actions are designed to ask for your confirmation first. Connect with OAuth (sign in to OpenFinance and approve) or an API key. Works with Claude, ChatGPT, Cursor, VS Code, Codex and any MCP client. No install. Home: https://openfinance.tech/agents · Docs: https://docs.openfinance.tech · GitHub: https://github.com/openfinance-tech/mcp
Non-custodial limit, stop-loss and DCA trading on Epsilon (Robinhood Chain) for AI agents
AI Agent Utility Layer for agent safety, web monitoring, crypto research and tool discovery.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to interact with Hyperliquid perpetual futures exchange for market analysis, account management, and risk-managed trading.51MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to trade on Limitless prediction markets on Base via MCP, with tools for wallet management, market discovery, order placement, and portfolio tracking.PolyForm Noncommercial 1.0.0

Context MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceEnables AI agents to browse, trade, and create prediction markets on Context Markets. Supports wallet management, order placement, and market creation through MCP tools.8 npm1MIT- FlicenseNot gradedqualityCmaintenanceEnables agents to access live crypto market data and execute risk-controlled paper trades through standardized MCP tool calls.-