get_docs
Read the Agent API manual
The complete Agent API manual (markdown): auth, trading, limits, withdrawals, error catalog.
Takes no parameters.
com.vectorialdataPublished by vectorialdata.comOfficial publisherv1.3.1Updated Nov 7, 2026
Self-custodial Hyperliquid perps, Polymarket, staking and yield for AI agents, with a kill switch.
Hosted brokerage MCP server letting an AI agent trade Hyperliquid perps, Polymarket markets and yield products, starting in free paper mode.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/com.vectorialdata%2Fterminal/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config.
{
"mcpServers": {
"vectorial-data-terminal-hyperliquid-poly": {
"type": "http",
"url": "https://terminal.vectorialdata.com/api/mcp"
}
}
}Let Claude, ChatGPT, Cursor or your own bot trade Hyperliquid perps and Polymarket prediction markets, and earn yield (HYPE staking, HLP, USDC lending), from wallets your agent owns, inside limits our server enforces, with a kill switch.
https://terminal.vectorialdata.com/api/mcp (Streamable HTTP)https://terminal.vectorialdata.com/api/agent/v1 · OpenAPI/api/agent/v1/docscom.vectorialdata/terminalThis repository holds documentation and signing examples. The server itself is hosted by Vectorial Data; you don't run anything to use it.
Any MCP client:
No key yet? The public tools work without it: get_docs, list_markets, get_registration_challenge,
register_agent (returns your key), list_prediction_markets, get_prediction_book. See
examples/01-register-and-paper-trade.ts.
68 tools, each with described arguments and MCP annotations (read-only / destructive / idempotent).
kill_switch pauses everything new at once; exits and moving money home keep working.Live tools answer with steps to sign. Each step names its signer:
"signer": "owner" → decode payload_b64 (base64 of the exact JSON request to the wallet provider), check every
line in verify against your own records, then sign the bytes with your OWNER P-256 key (ECDSA over SHA-256,
DER, base64)."signer": "trading_key" → sign typed_data (EIP-712) with your trading key.Then submit the signatures in order. See examples/02-sign-operation.ts for a
complete signer that refuses anything it did not expect.
Never sign a payload you have not decoded and checked. A signer that signs blind is the one way a compromised server, network or prompt could make your agent pay someone else.
01-register-and-paper-trade.ts — create a wallet, register, place a
paper order, read positions and metrics.02-sign-operation.ts — sign and submit any live Earn / move operation (owner and
trading-key steps), checking each payload before signing.Requires Node 20+.
The operator of an agent (the person or entity that controls its keys and funds it) is responsible for being allowed to trade derivatives and prediction markets where they are. Requests from OFAC-sanctioned jurisdictions are refused. Polymarket does not allow trading from some countries, including the United States. Earn asks for a one-time eligibility certification by the operator.
Found something? Write to the contact in terminal.vectorialdata.com/.well-known/security.txt. Please don't open public issues for vulnerabilities.
The examples and documentation in this repository are MIT-licensed. The hosted service has its own terms.
Source: README.md at commit 978dda3
Read the Agent API manual
The complete Agent API manual (markdown): auth, trading, limits, withdrawals, error catalog.
Takes no parameters.
List perps markets
Tradeable markets with live prices and the precision metadata needed to size orders (size_decimals, min_size, price rules, $10 min notional).
Takes no parameters.
Get a registration challenge
Step 1 of creating an agent account: get a nonce+message to sign (EIP-191) with the agent's own EVM wallet.
addressrequiredRegister an agent account
Step 2: register with the signed challenge. Returns the api_key ONCE — store it and configure it as the Authorization header of this MCP server. New accounts start in paper mode.
labelrequirednoncerequiredaddressrequiredsignaturerequiredGet your account
Your agent account: status, mode (paper|live), scopes, live balances, deposit address, limits.
Takes no parameters.
Get open positions
Open positions (live: venue truth; paper: from your fills).
Takes no parameters.
List your orders
Your authoritative order ledger (cursor-paginated). Paper triggers appear as trigger_tp/trigger_sl rows.
limitbeforestatusGet your performance metrics
Your tear-sheet: win rate, net PnL, fees, drawdown, Sharpe, equity curve — computed server-side from the authoritative ledger.
modewindowPlace a perps order
Place an order. PAPER mode executes immediately (simulated fill against real prices — nothing to sign). LIVE mode trades from your trading wallet (create_trading_wallet + authorize_trading_key first) and returns typed_data to sign with your TRADING key, then submit_order. Fees: 0.25% per perps trade, the same everyone pays, settled automatically. Brackets: pass tp/sl. Sizing: explicit size, or risk-first via risk_usd+stop_price (size = risk / |entry−stop|). Min notional $10.
sltpsiderequiredsizetyperequiredmarketrequiredrisk_usdstop_pricelimit_pricereduce_onlyclient_order_idExecute a signed order
Execute a prepared LIVE order with your trading key's signatures (one per typed_data, in order).
order_idrequiredsignaturesrequiredClose a position
Close an open position (fully or size_pct). Paper executes immediately; live returns typed_data for signing.
marketrequiredsize_pctAdd take-profit / stop-loss
Attach post-hoc reduce-only TP/SL triggers to an open position. Paper executes immediately.
sltpmarketrequiredCancel a resting order
Cancel a resting order by ledger id. Paper executes immediately.
order_idrequiredExecute a signed intent
Execute a prepared intent (cancel/protect/withdraw) with the wallet's signatures.
intent_idrequiredsignaturesrequiredLog a trading decision
Log WHY you traded (your audit trail and future public track record). Pass order_id to correlate.
modelorder_idreasoningrequiredGet your safety limits
Your bounded-autonomy rails (caps, allowlists, pending loosenings).
Takes no parameters.
Update your safety limits
Adjust rails. Tightening is instant; loosening waits 24h (see /limits/escalate in the docs for the wallet-signed immediate path).
asset_allowlistmax_daily_loss_usdmax_order_notional_usdmax_position_notional_usdSwitch paper / live
Flip paper ↔ live. Fund the wallet before going live (see get_account.deposit).
moderequiredPause all trading (kill switch)
Instant pause: every subsequent prepare/submit is rejected until resume_trading (which needs the wallet's signature).
Takes no parameters.
Resume trading (wallet-signed)
Reactivate after kill_switch. Needs the account WALLET's signature (the api key alone cannot undo a pause): call it with no arguments to get { nonce, message }, sign `message` with your agent wallet (EIP-191), then call it again with nonce + signature.
noncesignatureGet the withdrawal policy
Money-out policy: mode (disabled|autonomous|human_passkey), strict destinations, guardian link.
Takes no parameters.
List pending withdrawals
Your withdraw intents and their approval lifecycle (human_passkey). Approved intents include signable actions.
Takes no parameters.
Prepare a withdrawal
Prepare a withdrawal (USDC → Arbitrum). Requires withdraw scope + matured allowlist; returns typed_data to sign externally (or approval_state=pending under human_passkey). MCP alone can NEVER move funds — execution requires the wallet's signature via submit_intent.
amount_usdrequireddestinationrequiredGet the human guardian status
Human guardian link state (human_passkey mode).
Takes no parameters.
Invite a human guardian
Mint a single-use invite (48h) for a human to become this agent's withdrawal guardian. Hand them the accept_url.
Takes no parameters.
List webhooks
Your webhook endpoints (max 5): url, subscribed event types, status, failure counters. Also returns the full event-type catalog.
Takes no parameters.
Create a webhook
Register a webhook endpoint (public https). Returns the HMAC signing secret ONCE (vd_whsec_…) — deliveries are signed `x-vd-signature: t=…,v1=hex(hmac_sha256(secret, t + '.' + body))`, at-least-once, dedupe by event id. Omit event_types to receive everything.
urlrequiredevent_typesGet a webhook
One webhook + its last 20 delivery attempts (status codes, retries, dead letters) — the delivery debugging surface.
webhook_idrequiredDelete a webhook
Remove a webhook endpoint (its queued deliveries are dropped).
webhook_idrequiredSend a test webhook event
Send a synchronous signed test event to a webhook and report the receiver's response — verify your endpoint + HMAC handling before relying on real events.
webhook_idrequiredList strategies you can copy
Strategies available to copy, with the SAME numbers a human sees, as a DAILY snapshot (UTC: the same object all day): time-weighted return net of fees (immune to the leader's deposits and withdrawals — never a return on capital), max drawdown, Sharpe, trade count and the leader's terms. Read max_drawdown_pct before ranking by return — the best return is often the one that hurt most.
Takes no parameters.
Get your copy-trading status
What this agent is copying, per leader. Live follows: your copy wallet is a Hyperliquid account you own — read its positions and every fee transfer directly from Hyperliquid (info: clearinghouseState and userNonFundingLedgerUpdates) with the address from GET /copy/wallet. get_positions reads your agent wallet, not the copy wallet. A retired paper follow shows only its status (result: null, retired.code = paper_copy_retired).
Takes no parameters.
Copy a leader with real funds
Start copying a leader with real funds: mode 'live' mirrors from your copy wallet — create and fund it first with create_copy_wallet. Mirrors begin at the leader's NEXT fill; past trades are never backfilled. Every mirror is sized on the copy wallet's FULL value (what you funded plus profits, minus losses), in proportion to the leader's equity — not on allocation_usd; to copy with less, fund less. Sizing includes the $10 minimum bump, so a small copy wallet gives a risk profile that does not match the leader's. mode 'paper' returns paper_copy_retired: a leader's operations are only visible to followers with real capital. Requires the 'copy' scope.
moderequiredleader_idrequiredallocation_usdrequiredStop copying a leader
Stop copying a leader. Live: 'stopping' while the engine closes your mirrored positions and settles fees. Requires the 'copy' scope.
leader_idrequiredCreate your copy wallet
Create the copy wallet needed for LIVE copying. You generate a P-256 keypair and send only the PUBLIC key — you own the wallet and can withdraw with your owner key at any time, without us. Our signer is locked by policy to fee destinations, which is what makes all fees settle automatically and keeps your Hyperliquid trading agent from expiring on you. Requires the 'copy' scope. TWO CALLS: the first (owner_public_key only) returns a message naming your key's fingerprint; sign it (EIP-191) with your agent wallet and call again with owner_public_key + nonce + signature. An API key alone can never bind an owner key.
noncesignatureowner_public_keyrequiredGet your trading wallet
Your trading wallet — the Hyperliquid account LIVE orders trade from: address and balances, trading key status (and when to renew it), how to fund it, fees (0.25% per perps trade, the same everyone pays, collected automatically) and custody terms.
Takes no parameters.
Create your trading wallet
Create your trading wallet (required for LIVE trading; your agent wallet must have nothing open). You generate a P-256 keypair and send only the PUBLIC key: it becomes the wallet's OWNER and never leaves your process. Our signer on it can only pay trading fees to our treasury and approve our builder fee — it cannot move your money anywhere else or authorize anyone to trade. TWO CALLS: the first (owner_public_key only) returns a message naming your key's fingerprint; sign it (EIP-191) with your agent wallet and call again with owner_public_key + nonce + signature.
noncesignatureowner_public_keyrequiredAuthorize a trading key
Authorize the key that signs your LIVE orders. Generate a NEW secp256k1 key (no Hyperliquid history — Hyperliquid refuses keys that already have an account). Call with no arguments to get the message that key must sign (EIP-191) as proof. Fund the trading wallet first. Then call with trading_key_address + trading_key_proof: you get payload_b64 (the exact Privy request as canonical JSON) and a `verify` list — decode it and check every field against YOUR records (your saved privy_wallet_id, your trading key) BEFORE signing it with your OWNER P-256 key (ECDSA P-256 over SHA-256, DER, base64). Call a third time adding time + owner_signature. Valid 180 days; repeat to renew or rotate.
timeowner_signaturetrading_key_prooftrading_key_addressSend trading funds to your agent wallet
Move USDC from your trading wallet back to your agent wallet, inside Hyperliquid (the destination is always your own agent wallet). Pending trading fees are collected first. TWO CALLS: the first returns one payload_b64 per rail with its `verify` list (destination = your agent wallet, amount = what you asked) — check it, then sign with your OWNER key; call again with time + owner_signatures {rail: signature}. Without an API key (e.g. a terminated account), call POST /api/agent/v1/trading/home directly with agent_wallet. To leave Hyperliquid, withdraw from your agent wallet as usual.
timeamount_usdrequiredowner_signaturesGet your copy wallet
Your copy wallet: address to fund, whether it is ready for live copying, and the custody terms.
Takes no parameters.
Get a scope challenge
Step 1 of gaining a new scope ('copy' to follow leaders, 'withdraw' to move funds). Returns a message to sign with your agent wallet. keys/rotate can only NARROW scopes — new authority always costs a wallet signature, and the challenge is bound to the intent so a signature given for one can never be replayed for the other.
intentrequiredGain a new scope (wallet-signed)
Step 2: submit the signature from get_scope_challenge and receive a NEW api key carrying the scope. Store it and replace the Authorization header of this MCP server — the old key keeps working during a short grace window.
noncerequiredintentrequiredsignaturerequiredRotate your API key
Mint a fresh api key, optionally NARROWING its scopes. Cannot add authority — use get_scope_challenge + escalate_scope for that. Previous keys stay valid for a short grace window so a running bot does not lose access mid-flight.
scopesList prediction markets
Prediction markets you can trade now (Polymarket): events with their markets and, per outcome, the CLOB token_id you trade and its price (a probability 0–1 = USD per share; a winning share pays $1). Default: by 24h volume. Optional: query (search), event_slug (one event), tag (a Gamma tag slug, e.g. sports, politics, crypto), limit (≤50), offset.
taglimitqueryoffsetevent_slugGet a prediction order book
Live order book of one prediction outcome (best first): best bid/ask, mid, tick size and the top levels with sizes in shares.
token_idrequiredGet your predictions account
Your predictions account: your deposit wallet (a Polymarket smart wallet only your agent wallet controls), activation steps, cash (pUSD = USD), WHERE TO DEPOSIT (any supported chain; lands as pUSD in minutes), anything pending and the last relayer transaction.
Takes no parameters.
Activate prediction markets
Enable prediction markets (once, gasless). Predictions trade LIVE only (no paper simulation) and need 'polymarket' in venue_allowlist. TWO CALLS: the first (no arguments) deploys your deposit wallet and returns actions[] — sign each typed_data (EIP-712) with your AGENT wallet, in order (ClobAuth links your Polymarket CLOB account; the approvals batch lets your wallet buy, sell and collect). Then call again with activation_id + signatures within 10 minutes. Nothing here moves money.
signaturesactivation_idPrepare a prediction order
Buy or sell a prediction outcome with a fill-or-kill market order (fills entirely at a protected price or nothing happens). BUY: amount_usd (min $1; Polymarket's taker fee and our builder fee go on top — the same everyone pays; max_spend_usd caps the all-in spend). SELL: shares. Optional limit_price (BUY: max, SELL: min) — the house price guard still applies, the stricter wins. Returns typed_data: sign it with your AGENT wallet (EIP-712), then submit_prediction_order within 60s. Your caps (order size, account exposure, daily loss) count perps and predictions together; sells only reduce and skip them.
siderequiredsharestoken_idrequiredamount_usdlimit_pricemax_spend_usdclient_order_idExecute a signed prediction order
Execute a prepared prediction order with your agent wallet's signature over its typed_data. Returns the fill (shares, average price, USD) or why it didn't fill (nothing is charged on a miss).
order_idrequiredsignaturerequiredGet your prediction positions
Your open prediction positions (Polymarket's numbers): shares, average and current price, cost, value, P&L, and whether a resolved winner is waiting to be collected (collectable).
Takes no parameters.
Prepare sending predictions cash home
Move predictions cash back to YOUR agent wallet as native USDC (polygon, arbitrum or base; min $2) through Polymarket's bridge — the destination is always your own agent wallet. Returns a batch typed_data: sign it with your AGENT wallet, then submit_predictions_batch. Works while paused; without an API key call POST /api/agent/v1/predictions/home directly with agent_wallet.
allto_chainamount_usdPrepare collecting winnings
Collect resolved WINNING positions into your predictions cash (Polymarket usually does this automatically at resolution; use this if get_prediction_positions shows collectable: true). Optional condition_id. Returns a batch typed_data: sign it with your AGENT wallet, then submit_predictions_batch.
condition_idExecute a signed predictions batch
Execute a prepared send_predictions_home or collect_prediction_winnings batch with your agent wallet's signature (gasless, via Polymarket's relayer).
batch_idrequiredsignaturerequiredGet Earn products and positions
Earn for agents: HLP (Hyperliquid's market-making vault), HYPE staking and USDC lending — rates, fees, lockups and validators; whether you can enter (live, 'earn' in venue_allowlist, certification); your trading wallet's balances and Earn positions. Everything runs from your trading wallet (create_trading_wallet first).
Takes no parameters.
Certify Earn eligibility
One-time Earn eligibility certification (valid 1 year): the agent's OPERATOR certifies it is not in an excluded jurisdiction (read get_earn → certification_text first). If the request comes from an excluded country (agents often run in US data centers), call again with confirm_operator_location: true only if the operator is located elsewhere.
confirm_operator_locationPrepare an HLP deposit
Deposit USDC from your trading wallet into HLP. Entry fee 0.55% (collected after the deposit lands), min $5.03, 4-day lockup; counts toward your exposure cap. Returns operation_id + signatures_needed[]: sign EACH step with the signer it names — 'owner' = your OWNER P-256 key over payload_b64 (decode it and check every `verify` line against YOUR records first), 'trading_key' = your trading key over typed_data (EIP-712) — then submit_operation within 5 minutes.
amount_usdrequiredPrepare an HLP withdrawal
Withdraw from HLP back to your trading wallet (free; after the 4-day lockup). Works while paused. Returns operation_id + signatures_needed[]: sign EACH step with the signer it names — 'owner' = your OWNER P-256 key over payload_b64 (decode it and check every `verify` line against YOUR records first), 'trading_key' = your trading key over typed_data (EIP-712) — then submit_operation within 5 minutes.
allamount_usdPrepare a HYPE purchase
Buy HYPE with USDC in your trading wallet (spot, immediate-or-cancel at up to +1% from mid; fee 0.25% in USDC; Hyperliquid's minimum order is $10). The outcome says how much HYPE arrived — stake it with stake_hype. Returns operation_id + signatures_needed[]: sign EACH step with the signer it names — 'owner' = your OWNER P-256 key over payload_b64 (decode it and check every `verify` line against YOUR records first), 'trading_key' = your trading key over typed_data (EIP-712) — then submit_operation within 5 minutes.
amount_usdrequiredPrepare a HYPE sale
Sell spot HYPE for USDC in your trading wallet (immediate-or-cancel at no less than -1% from mid; the same spot sell fee everyone pays). Works while paused. Returns operation_id + signatures_needed[]: sign EACH step with the signer it names — 'owner' = your OWNER P-256 key over payload_b64 (decode it and check every `verify` line against YOUR records first), 'trading_key' = your trading key over typed_data (EIP-712) — then submit_operation within 5 minutes.
allamount_hypePrepare staking HYPE
Stake spot HYPE with a validator (get_earn → products.staking.validators, neutral order). Entry fee 0.25% in HYPE; rewards are paid daily on the delegation. Two owner steps: into the staking balance, then delegate. Returns operation_id + signatures_needed[]: sign EACH step with the signer it names — 'owner' = your OWNER P-256 key over payload_b64 (decode it and check every `verify` line against YOUR records first), 'trading_key' = your trading key over typed_data (EIP-712) — then submit_operation within 5 minutes.
validatorrequiredamount_hyperequiredPrepare delegating HYPE
Delegate HYPE that is already in your staking balance (free): finishes a stake whose delegation didn't go through, or re-delegates after an undelegate. Returns operation_id + signatures_needed[]: sign EACH step with the signer it names — 'owner' = your OWNER P-256 key over payload_b64 (decode it and check every `verify` line against YOUR records first), 'trading_key' = your trading key over typed_data (EIP-712) — then submit_operation within 5 minutes.
validatorrequiredamount_hyperequiredPrepare unstaking HYPE
Unstake HYPE (free): with validator, undelegate it first (a delegation is locked 1 day); then Hyperliquid's 7-day withdrawal to spot starts. Without validator, only the withdrawal of HYPE already undelegated. Works while paused. Returns operation_id + signatures_needed[]: sign EACH step with the signer it names — 'owner' = your OWNER P-256 key over payload_b64 (decode it and check every `verify` line against YOUR records first), 'trading_key' = your trading key over typed_data (EIP-712) — then submit_operation within 5 minutes.
validatoramount_hyperequiredPrepare lending USDC
Lend USDC on Base in our Earn USDC vault (Morpho, Gauntlet USDC Prime) from your trading wallet's address on Base — move USDC there first with move_funds perps → earn_usdc. No entry fee; the vault keeps 20% of the yield. Owner-signed Base transactions (gas ~1¢ in USDC): submit_operation needs owner_public_key. Returns operation_id + signatures_needed[]: sign EACH step with the signer it names — 'owner' = your OWNER P-256 key over payload_b64 (decode it and check every `verify` line against YOUR records first), 'trading_key' = your trading key over typed_data (EIP-712) — then submit_operation within 5 minutes.
allamount_usdPrepare withdrawing lent USDC
Withdraw from the Earn USDC vault to your USDC on Base (free; then move_funds earn_usdc → perps to trade with it). Works while paused. submit_operation needs owner_public_key. Returns operation_id + signatures_needed[]: sign EACH step with the signer it names — 'owner' = your OWNER P-256 key over payload_b64 (decode it and check every `verify` line against YOUR records first), 'trading_key' = your trading key over typed_data (EIP-712) — then submit_operation within 5 minutes.
allamount_usdPrepare a spot ↔ perps transfer
Move USDC between spot and perps inside your trading wallet (classic accounts only; free). Returns operation_id + signatures_needed[]: sign EACH step with the signer it names — 'owner' = your OWNER P-256 key over payload_b64 (decode it and check every `verify` line against YOUR records first), 'trading_key' = your trading key over typed_data (EIP-712) — then submit_operation within 5 minutes.
torequiredamount_usdrequiredPrepare moving money between your accounts
Move money between YOUR accounts, in any direction: perps (trading wallet on Hyperliquid), predictions (your Polymarket deposit wallet) and earn_usdc (your trading wallet's USDC on Base). No fee of ours (Circle/Polymarket bridge fees shown in the summary). Moves from perps or earn_usdc return an operation for submit_operation (from earn_usdc: owner-signed Base transactions → pass owner_public_key); moves from predictions return a predictions batch: sign it with your AGENT wallet and call submit_predictions_batch.
torequiredallfromrequiredamount_usdExecute a signed Earn / move operation
Execute a prepared Earn / move operation with your signatures, one per step and in order (owner steps: base64 P-256 signature over payload_b64; trading_key steps: 0x… EIP-712 signature). All signatures are checked before the first step runs. Returns each step's result; status 'uncertain' means check get_earn before retrying. If this call times out, the operation may still be finishing: check list_operations ('executing' = still running; don't prepare it again until it ends).
signaturesrequiredoperation_idrequiredowner_public_keyList your Earn / move operations
Your last Earn / move operations: what each did, step by step, and how it ended.
limit100% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
claude mcp add --transport http vectorialdata https://terminal.vectorialdata.com/api/mcp \ --header "Authorization: Bearer vd_agt_…"{ "mcpServers": { "vectorialdata": { "type": "http", "url": "https://terminal.vectorialdata.com/api/mcp", "headers": { "Authorization": "Bearer vd_agt_…" } } }}cd examplesnpm installnpx tsx 01-register-and-paper-trade.ts