Koskamo

Vectorial Data Terminal MCP

An official MCP server provided by Vectorial Data that enables AI agents to interact with the Vectorial Data Terminal. It exposes native tools for self-custodial trading on Hyperliquid perpetuals and Polymarket prediction markets, including registration, order execution, limit setting, and yield earning via HLP or staking, all secured by user-held keys and server-enforced risk limits.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Vectorial Data Terminal MCP logo, by Vectorial DataVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Vectorial Data
You need:Authorization: Bearer <api key>
MCP endpoint (Streamable HTTP)
https://terminal.vectorialdata.com/api/mcp
Vendor documentation

What its tools do

68 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

68 of 68 have a description · 68 of 68 declare behavior hints · 50 of 50 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to vectorialdata.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Register an AI agent wallet and obtain an API key via EIP-191 signature
  • Execute paper or live trades on Hyperliquid perpetual futures
  • Place prediction market orders on Polymarket
  • Manage risk limits and activate a kill switch for the agent

Source and maintenance

Vendor evidenceRegistry 1.3.0

Protocol and capabilities

Server
vectorialdata-terminal 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
68 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

VectorialData Terminal — non-custodial brokerage for AIs (Hyperliquid perps + Polymarket prediction markets + Earn). New accounts start in PAPER mode: a full simulation against real prices where nothing needs signing — you can trade end-to-end with these tools alone. Flow: register (or bring an api key via the Authorization header) → list_markets → place_order → get_positions / get_metrics. Every order is validated against server-side safety rails (notional caps, daily-loss breaker, kill switch). LIVE mode is non-custodial: prepare tools return EIP-712 typed_data that must be signed by the agent's own wallet OUTSIDE this MCP server; nothing here can move real funds by itself. You can also COPY a human strategy: list_copy_leaders (each leader's public stats, a daily UTC snapshot) → follow_leader with mode 'live', which mirrors with real funds from a copy wallet you own (create_copy_wallet) — and unlike orders, live copy needs no signature from you: our signer is policy-locked to fee destinations. A leader's operations and open positions are only visible to followers copying with real capital, so there is no paper copy (mode 'paper' returns paper_copy_retired). PREDICTION MARKETS (Polymarket, live only): list_prediction_markets → activate_predictions (once: two signatures, gasless) → fund your deposit wallet (get_predictions_account.deposit) → place_prediction_order + submit_prediction_order → get_prediction_positions → send_predictions_home. Your deposit wallet is controlled only by your agent wallet; every order is signed by it. EARN + MOVING MONEY (live, from your trading wallet): get_earn → certify_earn (once) → earn_hlp_deposit / buy_hype + stake_hype / earn_usdc_deposit → submit_operation; exits (earn_hlp_withdraw, unstake_hype, sell_hype, earn_usdc_withdraw) work while paused. move_funds moves perps ↔ predictions ↔ earn_usdc. Every step is signed by your own keys (owner or trading key); fees are the same everyone pays. Full docs: the get_docs tool.

Tools

68 advertised

get_docs
Advertised by the server during the last successful anonymous check.
Advertised read-only

The complete Agent API manual (markdown): auth, trading, limits, withdrawals, error catalog.

get_docs input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_docs annotations
{
  "title": "Read the Agent API manual",
  "readOnlyHint": true,
  "openWorldHint": false
}
list_markets
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Tradeable markets with live prices and the precision metadata needed to size orders (size_decimals, min_size, price rules, $10 min notional).

list_markets input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
list_markets annotations
{
  "title": "List perps markets",
  "readOnlyHint": true,
  "openWorldHint": true
}
get_registration_challenge
Advertised by the server during the last successful anonymous check.
Open-world

Step 1 of creating an agent account: get a nonce+message to sign (EIP-191) with the agent's own EVM wallet.

get_registration_challenge input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "address"
  ],
  "properties": {
    "address": {
      "type": "string",
      "description": "The agent wallet address (0x…)"
    }
  }
}
get_registration_challenge annotations
{
  "title": "Get a registration challenge",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
register_agent
Advertised by the server during the last successful anonymous check.
Open-world

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.

register_agent input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "address",
    "nonce",
    "signature",
    "label"
  ],
  "properties": {
    "label": {
      "type": "string",
      "maxLength": 60,
      "minLength": 1,
      "description": "A name for this agent, 1–60 characters, shown on your account"
    },
    "nonce": {
      "type": "string",
      "description": "The nonce returned by get_registration_challenge"
    },
    "address": {
      "type": "string",
      "description": "Your agent wallet address (0x…): the same one you passed to get_registration_challenge"
    },
    "signature": {
      "type": "string",
      "description": "EIP-191 signature of the challenge message"
    }
  }
}
register_agent annotations
{
  "title": "Register an agent account",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_account
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Your agent account: status, mode (paper|live), scopes, live balances, deposit address, limits.

get_account input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_account annotations
{
  "title": "Get your account",
  "readOnlyHint": true,
  "openWorldHint": true
}
get_positions
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Open positions (live: venue truth; paper: from your fills).

get_positions input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_positions annotations
{
  "title": "Get open positions",
  "readOnlyHint": true,
  "openWorldHint": true
}
list_orders
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Your authoritative order ledger (cursor-paginated). Paper triggers appear as trigger_tp/trigger_sl rows.

list_orders input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 200,
      "minimum": 1,
      "description": "Page size, 1–200"
    },
    "before": {
      "type": "string",
      "description": "Cursor from a previous page's next_cursor"
    },
    "status": {
      "type": "string",
      "description": "Filter: prepared|submitted|resting|filled|rejected|cancelled|expired"
    }
  }
}
list_orders annotations
{
  "title": "List your orders",
  "readOnlyHint": true,
  "openWorldHint": true
}
get_metrics
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Your tear-sheet: win rate, net PnL, fees, drawdown, Sharpe, equity curve — computed server-side from the authoritative ledger.

get_metrics input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "mode": {
      "enum": [
        "paper",
        "live"
      ],
      "type": "string",
      "description": "Which ledger to measure: paper or live"
    },
    "window": {
      "enum": [
        "7d",
        "30d",
        "90d",
        "all"
      ],
      "type": "string",
      "description": "Stats window: 7d, 30d, 90d or all"
    }
  }
}
get_metrics annotations
{
  "title": "Get your performance metrics",
  "readOnlyHint": true,
  "openWorldHint": true
}
place_order
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

place_order input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "market",
    "side",
    "type"
  ],
  "properties": {
    "sl": {
      "type": "number",
      "description": "Stop-loss trigger price in USD (optional reduce-only bracket)",
      "exclusiveMinimum": 0
    },
    "tp": {
      "type": "number",
      "description": "Take-profit trigger price in USD (optional reduce-only bracket)",
      "exclusiveMinimum": 0
    },
    "side": {
      "enum": [
        "buy",
        "sell"
      ],
      "type": "string",
      "description": "buy = go long (or reduce a short); sell = go short (or reduce a long)"
    },
    "size": {
      "type": "number",
      "description": "Size in coins, e.g. 0.01 for BTC. Omit it to size by risk_usd + stop_price instead",
      "exclusiveMinimum": 0
    },
    "type": {
      "enum": [
        "market",
        "limit"
      ],
      "type": "string",
      "description": "market = fills now at a protected price; limit = rests at limit_price"
    },
    "market": {
      "type": "string",
      "description": "Symbol, e.g. BTC"
    },
    "risk_usd": {
      "type": "number",
      "description": "Risk-first sizing: dollars at risk to the stop",
      "exclusiveMinimum": 0
    },
    "stop_price": {
      "type": "number",
      "description": "Required with risk_usd; also becomes the SL",
      "exclusiveMinimum": 0
    },
    "limit_price": {
      "type": "number",
      "description": "Limit price in USD; required when type is limit",
      "exclusiveMinimum": 0
    },
    "reduce_only": {
      "type": "boolean",
      "description": "true = this order can only reduce an existing position, never open or flip one"
    },
    "client_order_id": {
      "type": "string",
      "description": "Idempotency key"
    }
  }
}
place_order annotations
{
  "title": "Place a perps order",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
submit_order
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Execute a prepared LIVE order with your trading key's signatures (one per typed_data, in order).

submit_order input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "order_id",
    "signatures"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "description": "The order_id returned by place_order"
    },
    "signatures": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One 0x… EIP-712 signature per actions[i].typed_data from place_order, in order"
    }
  }
}
submit_order annotations
{
  "title": "Execute a signed order",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
close_position
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Close an open position (fully or size_pct). Paper executes immediately; live returns typed_data for signing.

close_position input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "market"
  ],
  "properties": {
    "market": {
      "type": "string",
      "description": "Symbol of the open position, e.g. BTC"
    },
    "size_pct": {
      "type": "number",
      "maximum": 100,
      "minimum": 1,
      "description": "Percent of the position to close; omit to close all of it"
    }
  }
}
close_position annotations
{
  "title": "Close a position",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
protect_position
Advertised by the server during the last successful anonymous check.
Open-world

Attach post-hoc reduce-only TP/SL triggers to an open position. Paper executes immediately.

protect_position input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "market"
  ],
  "properties": {
    "sl": {
      "type": "number",
      "description": "Stop-loss trigger price in USD",
      "exclusiveMinimum": 0
    },
    "tp": {
      "type": "number",
      "description": "Take-profit trigger price in USD",
      "exclusiveMinimum": 0
    },
    "market": {
      "type": "string",
      "description": "Symbol of the open position, e.g. BTC"
    }
  }
}
protect_position annotations
{
  "title": "Add take-profit / stop-loss",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
cancel_order
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Cancel a resting order by ledger id. Paper executes immediately.

cancel_order input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "order_id"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "description": "The order_id of a resting order (see list_orders)"
    }
  }
}
cancel_order annotations
{
  "title": "Cancel a resting order",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
submit_intent
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Execute a prepared intent (cancel/protect/withdraw) with the wallet's signatures.

submit_intent input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "intent_id",
    "signatures"
  ],
  "properties": {
    "intent_id": {
      "type": "string",
      "description": "The intent_id returned by close_position, protect_position, cancel_order or prepare_withdrawal"
    },
    "signatures": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "One 0x… EIP-712 signature per actions[i].typed_data of the intent, in order"
    }
  }
}
submit_intent annotations
{
  "title": "Execute a signed intent",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
log_decision
Advertised by the server during the last successful anonymous check.

Log WHY you traded (your audit trail and future public track record). Pass order_id to correlate.

log_decision input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "reasoning"
  ],
  "properties": {
    "model": {
      "type": "string",
      "description": "The model or strategy that made the decision (optional)"
    },
    "order_id": {
      "type": "string",
      "description": "The order_id this decision belongs to, to correlate them (optional)"
    },
    "reasoning": {
      "type": "string",
      "maxLength": 20000,
      "description": "Why you traded (or didn't), in plain words; kept in your audit trail"
    }
  }
}
log_decision annotations
{
  "title": "Log a trading decision",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get_limits
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Your bounded-autonomy rails (caps, allowlists, pending loosenings).

get_limits input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_limits annotations
{
  "title": "Get your safety limits",
  "readOnlyHint": true,
  "openWorldHint": true
}
update_limits
Advertised by the server during the last successful anonymous check.
Open-world

Adjust rails. Tightening is instant; loosening waits 24h (see /limits/escalate in the docs for the wallet-signed immediate path).

update_limits input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "asset_allowlist": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        {
          "type": "null"
        }
      ],
      "description": "Markets you may open, e.g. [\"BTC\",\"ETH\"]; null = all. Closing is always allowed"
    },
    "max_daily_loss_usd": {
      "anyOf": [
        {
          "type": "number",
          "exclusiveMinimum": 0
        },
        {
          "type": "null"
        }
      ],
      "description": "Daily realized-loss breaker in USD (UTC day); null = no cap"
    },
    "max_order_notional_usd": {
      "anyOf": [
        {
          "type": "number",
          "exclusiveMinimum": 0
        },
        {
          "type": "null"
        }
      ],
      "description": "Max USD notional of a single order; null = no cap (loosening waits 24h)"
    },
    "max_position_notional_usd": {
      "anyOf": [
        {
          "type": "number",
          "exclusiveMinimum": 0
        },
        {
          "type": "null"
        }
      ],
      "description": "Max total exposure in USD across perps, predictions and Earn; null = no cap"
    }
  }
}
update_limits annotations
{
  "title": "Update your safety limits",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
set_mode
Advertised by the server during the last successful anonymous check.
Open-world

Flip paper ↔ live. Fund the wallet before going live (see get_account.deposit).

set_mode input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "mode"
  ],
  "properties": {
    "mode": {
      "enum": [
        "paper",
        "live"
      ],
      "type": "string",
      "description": "paper = simulated fills, nothing to sign; live = real funds from your trading wallet"
    }
  }
}
set_mode annotations
{
  "title": "Switch paper / live",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
kill_switch
Advertised by the server during the last successful anonymous check.
Open-world

Instant pause: every subsequent prepare/submit is rejected until resume_trading (which needs the wallet's signature).

kill_switch input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
kill_switch annotations
{
  "title": "Pause all trading (kill switch)",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
resume_trading
Advertised by the server during the last successful anonymous check.
Open-world

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.

resume_trading input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "nonce": {
      "type": "string",
      "description": "Second call only: the nonce returned by the first call"
    },
    "signature": {
      "type": "string",
      "description": "EIP-191 signature of the challenge message, by the account wallet"
    }
  }
}
resume_trading annotations
{
  "title": "Resume trading (wallet-signed)",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_withdrawals_config
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Money-out policy: mode (disabled|autonomous|human_passkey), strict destinations, guardian link.

get_withdrawals_config input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_withdrawals_config annotations
{
  "title": "Get the withdrawal policy",
  "readOnlyHint": true,
  "openWorldHint": true
}
list_pending_withdrawals
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Your withdraw intents and their approval lifecycle (human_passkey). Approved intents include signable actions.

list_pending_withdrawals input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
list_pending_withdrawals annotations
{
  "title": "List pending withdrawals",
  "readOnlyHint": true,
  "openWorldHint": true
}
prepare_withdrawal
Advertised by the server during the last successful anonymous check.
Open-world

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.

prepare_withdrawal input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "destination",
    "amount_usd"
  ],
  "properties": {
    "amount_usd": {
      "type": "number",
      "description": "USDC to withdraw from Hyperliquid",
      "exclusiveMinimum": 0
    },
    "destination": {
      "type": "string",
      "description": "0x address that receives the USDC; it must already be in your withdrawal allowlist"
    }
  }
}
prepare_withdrawal annotations
{
  "title": "Prepare a withdrawal",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
guardian_status
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Human guardian link state (human_passkey mode).

guardian_status input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
guardian_status annotations
{
  "title": "Get the human guardian status",
  "readOnlyHint": true,
  "openWorldHint": true
}
invite_guardian
Advertised by the server during the last successful anonymous check.
Open-world

Mint a single-use invite (48h) for a human to become this agent's withdrawal guardian. Hand them the accept_url.

invite_guardian input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
invite_guardian annotations
{
  "title": "Invite a human guardian",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
list_webhooks
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Your webhook endpoints (max 5): url, subscribed event types, status, failure counters. Also returns the full event-type catalog.

list_webhooks input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
list_webhooks annotations
{
  "title": "List webhooks",
  "readOnlyHint": true,
  "openWorldHint": true
}
create_webhook
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_webhook input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "description": "Public https endpoint that accepts POSTed JSON events"
    },
    "event_types": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Subset of the catalog from list_webhooks; omit = all"
    }
  }
}
create_webhook annotations
{
  "title": "Create a webhook",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_webhook
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

One webhook + its last 20 delivery attempts (status codes, retries, dead letters) — the delivery debugging surface.

get_webhook input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "webhook_id"
  ],
  "properties": {
    "webhook_id": {
      "type": "string",
      "description": "The webhook id (see list_webhooks)"
    }
  }
}
get_webhook annotations
{
  "title": "Get a webhook",
  "readOnlyHint": true,
  "openWorldHint": true
}
delete_webhook
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Remove a webhook endpoint (its queued deliveries are dropped).

delete_webhook input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "webhook_id"
  ],
  "properties": {
    "webhook_id": {
      "type": "string",
      "description": "The webhook id to delete (see list_webhooks)"
    }
  }
}
delete_webhook annotations
{
  "title": "Delete a webhook",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
test_webhook
Advertised by the server during the last successful anonymous check.
Open-world

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.

test_webhook input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "webhook_id"
  ],
  "properties": {
    "webhook_id": {
      "type": "string",
      "description": "The webhook id to send a test event to (see list_webhooks)"
    }
  }
}
test_webhook annotations
{
  "title": "Send a test webhook event",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
list_copy_leaders
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

list_copy_leaders input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
list_copy_leaders annotations
{
  "title": "List strategies you can copy",
  "readOnlyHint": true,
  "openWorldHint": true
}
get_copy_status
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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).

get_copy_status input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_copy_status annotations
{
  "title": "Get your copy-trading status",
  "readOnlyHint": true,
  "openWorldHint": true
}
follow_leader
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

follow_leader input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "leader_id",
    "allocation_usd",
    "mode"
  ],
  "properties": {
    "mode": {
      "enum": [
        "paper",
        "live"
      ],
      "type": "string",
      "description": "'live' = real funds from your copy wallet. 'paper' is retired (returns paper_copy_retired)."
    },
    "leader_id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "The leader's numeric id (see list_copy_leaders)",
      "exclusiveMinimum": 0
    },
    "allocation_usd": {
      "type": "number",
      "description": "Recorded with the follow. Mirrors size on the copy wallet's full value, not on this number (the wallet must hold the leader's minimum)",
      "exclusiveMinimum": 0
    }
  }
}
follow_leader annotations
{
  "title": "Copy a leader with real funds",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
unfollow_leader
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Stop copying a leader. Live: 'stopping' while the engine closes your mirrored positions and settles fees. Requires the 'copy' scope.

unfollow_leader input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "leader_id"
  ],
  "properties": {
    "leader_id": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "The numeric id of the leader you stop copying (see get_copy_status)",
      "exclusiveMinimum": 0
    }
  }
}
unfollow_leader annotations
{
  "title": "Stop copying a leader",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
create_copy_wallet
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_copy_wallet input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "owner_public_key"
  ],
  "properties": {
    "nonce": {
      "type": "string",
      "description": "Second call only: the nonce returned by the first call."
    },
    "signature": {
      "type": "string",
      "description": "Second call only: EIP-191 signature of the returned message by your agent wallet."
    },
    "owner_public_key": {
      "type": "string",
      "description": "Your P-256 PUBLIC key in SPKI form (PEM or base64). Never send the private key."
    }
  }
}
create_copy_wallet annotations
{
  "title": "Create your copy wallet",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_trading_wallet
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

get_trading_wallet input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_trading_wallet annotations
{
  "title": "Get your trading wallet",
  "readOnlyHint": true,
  "openWorldHint": true
}
create_trading_wallet
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_trading_wallet input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "owner_public_key"
  ],
  "properties": {
    "nonce": {
      "type": "string",
      "description": "Second call only: the nonce returned by the first call."
    },
    "signature": {
      "type": "string",
      "description": "Second call only: EIP-191 signature of the returned message by your agent wallet."
    },
    "owner_public_key": {
      "type": "string",
      "description": "Your P-256 PUBLIC key in SPKI form (PEM or base64). Never send the private key."
    }
  }
}
create_trading_wallet annotations
{
  "title": "Create your trading wallet",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
authorize_trading_key
Advertised by the server during the last successful anonymous check.
Open-world

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.

authorize_trading_key input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "time": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Last call only: the `time` returned by the previous call"
    },
    "owner_signature": {
      "type": "string",
      "description": "Last call only: your OWNER key's signature over payload_b64"
    },
    "trading_key_proof": {
      "type": "string",
      "description": "EIP-191 signature of trading_key_message by the trading key"
    },
    "trading_key_address": {
      "type": "string",
      "description": "A NEW 0x address whose key you generated to sign orders (not your agent wallet nor the trading wallet)"
    }
  }
}
authorize_trading_key annotations
{
  "title": "Authorize a trading key",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
send_trading_funds_home
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

send_trading_funds_home input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "amount_usd"
  ],
  "properties": {
    "time": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": -9007199254740991,
      "description": "Second call only: the `time` returned by the first call (the nonce you signed)"
    },
    "amount_usd": {
      "type": "number",
      "description": "At most 2 decimals (it is exactly what gets signed).",
      "exclusiveMinimum": 0
    },
    "owner_signatures": {
      "type": "object",
      "description": "Second call only: { sendAsset?: sig, usdSend?: sig }",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "string"
      }
    }
  }
}
send_trading_funds_home annotations
{
  "title": "Send trading funds to your agent wallet",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": true
}
get_copy_wallet
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Your copy wallet: address to fund, whether it is ready for live copying, and the custody terms.

get_copy_wallet input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_copy_wallet annotations
{
  "title": "Get your copy wallet",
  "readOnlyHint": true,
  "openWorldHint": true
}
get_scope_challenge
Advertised by the server during the last successful anonymous check.
Open-world

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.

get_scope_challenge input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "intent"
  ],
  "properties": {
    "intent": {
      "enum": [
        "enable_copy",
        "enable_withdraw"
      ],
      "type": "string",
      "description": "enable_copy = gain the copy scope; enable_withdraw = gain the withdraw scope"
    }
  }
}
get_scope_challenge annotations
{
  "title": "Get a scope challenge",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
escalate_scope
Advertised by the server during the last successful anonymous check.
Open-world

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.

escalate_scope input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "nonce",
    "signature",
    "intent"
  ],
  "properties": {
    "nonce": {
      "type": "string",
      "description": "The nonce returned by get_scope_challenge"
    },
    "intent": {
      "enum": [
        "enable_copy",
        "enable_withdraw"
      ],
      "type": "string",
      "description": "The same intent you passed to get_scope_challenge"
    },
    "signature": {
      "type": "string",
      "description": "EIP-191 signature of the challenge message"
    }
  }
}
escalate_scope annotations
{
  "title": "Gain a new scope (wallet-signed)",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
rotate_key
Advertised by the server during the last successful anonymous check.
Open-world

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.

rotate_key input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "scopes": {
      "type": "array",
      "items": {
        "enum": [
          "read",
          "trade",
          "withdraw",
          "copy"
        ],
        "type": "string"
      },
      "description": "Subset of your current scopes. Omit to keep the same set."
    }
  }
}
rotate_key annotations
{
  "title": "Rotate your API key",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
list_prediction_markets
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

list_prediction_markets input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "tag": {
      "type": "string",
      "maxLength": 60,
      "description": "A Polymarket tag slug, e.g. sports, politics, crypto"
    },
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "Events per page, 1–50"
    },
    "query": {
      "type": "string",
      "maxLength": 120,
      "description": "Free-text search, e.g. 'fed rates' or 'lakers'"
    },
    "offset": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "How many events to skip (pagination)"
    },
    "event_slug": {
      "type": "string",
      "maxLength": 200,
      "description": "Return one event by its slug (from an earlier listing)"
    }
  }
}
list_prediction_markets annotations
{
  "title": "List prediction markets",
  "readOnlyHint": true,
  "openWorldHint": true
}
get_prediction_book
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Live order book of one prediction outcome (best first): best bid/ask, mid, tick size and the top levels with sizes in shares.

get_prediction_book input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "token_id"
  ],
  "properties": {
    "token_id": {
      "type": "string",
      "description": "The outcome's decimal CLOB token id (from list_prediction_markets)"
    }
  }
}
get_prediction_book annotations
{
  "title": "Get a prediction order book",
  "readOnlyHint": true,
  "openWorldHint": true
}
get_predictions_account
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

get_predictions_account input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_predictions_account annotations
{
  "title": "Get your predictions account",
  "readOnlyHint": true,
  "openWorldHint": true
}
activate_predictions
Advertised by the server during the last successful anonymous check.
Open-world

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.

activate_predictions input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "signatures": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Second call only: one 0x… signature per action, in order"
    },
    "activation_id": {
      "type": "string",
      "description": "Second call only"
    }
  }
}
activate_predictions annotations
{
  "title": "Activate prediction markets",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
place_prediction_order
Advertised by the server during the last successful anonymous check.
Open-world

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.

place_prediction_order input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "token_id",
    "side"
  ],
  "properties": {
    "side": {
      "enum": [
        "buy",
        "sell"
      ],
      "type": "string",
      "description": "buy = buy shares of this outcome; sell = sell shares you hold"
    },
    "shares": {
      "type": "number",
      "description": "SELL only: how many shares to sell",
      "exclusiveMinimum": 0
    },
    "token_id": {
      "type": "string",
      "description": "The outcome's CLOB token id (decimal string) from list_prediction_markets"
    },
    "amount_usd": {
      "type": "number",
      "description": "BUY only: USD to spend (min $1; fees go on top)",
      "exclusiveMinimum": 0
    },
    "limit_price": {
      "type": "number",
      "description": "Optional worst price as a probability 0–1 (buy: max, sell: min); it can only tighten the house guard",
      "exclusiveMaximum": 1,
      "exclusiveMinimum": 0
    },
    "max_spend_usd": {
      "type": "number",
      "description": "BUY only: cap on the all-in spend, fees included",
      "exclusiveMinimum": 0
    },
    "client_order_id": {
      "type": "string",
      "maxLength": 64,
      "description": "Your own id for this order (up to 64 characters)"
    }
  }
}
place_prediction_order annotations
{
  "title": "Prepare a prediction order",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
submit_prediction_order
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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).

submit_prediction_order input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "order_id",
    "signature"
  ],
  "properties": {
    "order_id": {
      "type": "string",
      "description": "The order_id returned by place_prediction_order"
    },
    "signature": {
      "type": "string",
      "description": "0x… EIP-712 signature by your agent wallet"
    }
  }
}
submit_prediction_order annotations
{
  "title": "Execute a signed prediction order",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
get_prediction_positions
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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).

get_prediction_positions input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_prediction_positions annotations
{
  "title": "Get your prediction positions",
  "readOnlyHint": true,
  "openWorldHint": true
}
send_predictions_home
Advertised by the server during the last successful anonymous check.
Open-world

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.

send_predictions_home input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "all": {
      "type": "boolean",
      "description": "true = send all your predictions cash"
    },
    "to_chain": {
      "enum": [
        "polygon",
        "arbitrum",
        "base"
      ],
      "type": "string",
      "description": "Chain where your agent wallet receives native USDC: polygon, arbitrum or base"
    },
    "amount_usd": {
      "type": "number",
      "description": "USD of predictions cash to send (min $2)",
      "exclusiveMinimum": 0
    }
  }
}
send_predictions_home annotations
{
  "title": "Prepare sending predictions cash home",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
collect_prediction_winnings
Advertised by the server during the last successful anonymous check.
Open-world

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.

collect_prediction_winnings input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "condition_id": {
      "type": "string",
      "description": "Collect only this market (0x condition id); omit to collect every resolved winner"
    }
  }
}
collect_prediction_winnings annotations
{
  "title": "Prepare collecting winnings",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
submit_predictions_batch
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Execute a prepared send_predictions_home or collect_prediction_winnings batch with your agent wallet's signature (gasless, via Polymarket's relayer).

submit_predictions_batch input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "batch_id",
    "signature"
  ],
  "properties": {
    "batch_id": {
      "type": "string",
      "description": "The batch_id returned by send_predictions_home, collect_prediction_winnings or move_funds"
    },
    "signature": {
      "type": "string",
      "description": "0x… EIP-712 signature by your agent wallet"
    }
  }
}
submit_predictions_batch annotations
{
  "title": "Execute a signed predictions batch",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
get_earn
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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).

get_earn input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {}
}
get_earn annotations
{
  "title": "Get Earn products and positions",
  "readOnlyHint": true,
  "openWorldHint": true
}
certify_earn
Advertised by the server during the last successful anonymous check.
Open-world

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.

certify_earn input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "confirm_operator_location": {
      "type": "boolean",
      "description": "true only if the agent's OPERATOR is outside the excluded jurisdictions although this request comes from one"
    }
  }
}
certify_earn annotations
{
  "title": "Certify Earn eligibility",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
earn_hlp_deposit
Advertised by the server during the last successful anonymous check.
Open-world

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.

earn_hlp_deposit input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "amount_usd"
  ],
  "properties": {
    "amount_usd": {
      "type": "number",
      "description": "USDC to put into HLP (min $5.03); the 0.55% entry fee is taken from it",
      "exclusiveMinimum": 0
    }
  }
}
earn_hlp_deposit annotations
{
  "title": "Prepare an HLP deposit",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
earn_hlp_withdraw
Advertised by the server during the last successful anonymous check.
Open-world

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.

earn_hlp_withdraw input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "all": {
      "type": "boolean",
      "description": "true = withdraw your whole HLP position"
    },
    "amount_usd": {
      "type": "number",
      "description": "USD to withdraw from HLP",
      "exclusiveMinimum": 0
    }
  }
}
earn_hlp_withdraw annotations
{
  "title": "Prepare an HLP withdrawal",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
buy_hype
Advertised by the server during the last successful anonymous check.
Open-world

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.

buy_hype input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "amount_usd"
  ],
  "properties": {
    "amount_usd": {
      "type": "number",
      "description": "USDC to spend on HYPE (Hyperliquid's minimum spot order is $10)",
      "exclusiveMinimum": 0
    }
  }
}
buy_hype annotations
{
  "title": "Prepare a HYPE purchase",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
sell_hype
Advertised by the server during the last successful anonymous check.
Open-world

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.

sell_hype input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "all": {
      "type": "boolean",
      "description": "true = sell all your free spot HYPE"
    },
    "amount_hype": {
      "type": "number",
      "description": "Spot HYPE to sell",
      "exclusiveMinimum": 0
    }
  }
}
sell_hype annotations
{
  "title": "Prepare a HYPE sale",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
stake_hype
Advertised by the server during the last successful anonymous check.
Open-world

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.

stake_hype input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "amount_hype",
    "validator"
  ],
  "properties": {
    "validator": {
      "type": "string",
      "description": "0x validator address"
    },
    "amount_hype": {
      "type": "number",
      "description": "Spot HYPE to stake; the 0.25% entry fee is kept from it",
      "exclusiveMinimum": 0
    }
  }
}
stake_hype annotations
{
  "title": "Prepare staking HYPE",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
delegate_hype
Advertised by the server during the last successful anonymous check.
Open-world

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.

delegate_hype input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "amount_hype",
    "validator"
  ],
  "properties": {
    "validator": {
      "type": "string",
      "description": "0x address of the validator (see get_earn → products.staking.validators)"
    },
    "amount_hype": {
      "type": "number",
      "description": "HYPE already in your staking balance to delegate",
      "exclusiveMinimum": 0
    }
  }
}
delegate_hype annotations
{
  "title": "Prepare delegating HYPE",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
unstake_hype
Advertised by the server during the last successful anonymous check.
Open-world

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.

unstake_hype input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "amount_hype"
  ],
  "properties": {
    "validator": {
      "type": "string",
      "description": "The validator to undelegate from; omit to only withdraw HYPE already undelegated"
    },
    "amount_hype": {
      "type": "number",
      "description": "HYPE to unstake",
      "exclusiveMinimum": 0
    }
  }
}
unstake_hype annotations
{
  "title": "Prepare unstaking HYPE",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
earn_usdc_deposit
Advertised by the server during the last successful anonymous check.
Open-world

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.

earn_usdc_deposit input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "all": {
      "type": "boolean",
      "description": "true = lend all your USDC on Base except what gas needs"
    },
    "amount_usd": {
      "type": "number",
      "description": "USDC on Base to lend",
      "exclusiveMinimum": 0
    }
  }
}
earn_usdc_deposit annotations
{
  "title": "Prepare lending USDC",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
earn_usdc_withdraw
Advertised by the server during the last successful anonymous check.
Open-world

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.

earn_usdc_withdraw input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "all": {
      "type": "boolean",
      "description": "true = withdraw your whole Earn USDC position"
    },
    "amount_usd": {
      "type": "number",
      "description": "USDC to withdraw from the vault to your USDC on Base",
      "exclusiveMinimum": 0
    }
  }
}
earn_usdc_withdraw annotations
{
  "title": "Prepare withdrawing lent USDC",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
transfer_spot_perps
Advertised by the server during the last successful anonymous check.
Open-world

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.

transfer_spot_perps input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "amount_usd",
    "to"
  ],
  "properties": {
    "to": {
      "enum": [
        "perps",
        "spot"
      ],
      "type": "string",
      "description": "Where the USDC goes: perps or spot"
    },
    "amount_usd": {
      "type": "number",
      "description": "USDC to move",
      "exclusiveMinimum": 0
    }
  }
}
transfer_spot_perps annotations
{
  "title": "Prepare a spot ↔ perps transfer",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
move_funds
Advertised by the server during the last successful anonymous check.
Open-world

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.

move_funds input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "from",
    "to"
  ],
  "properties": {
    "to": {
      "enum": [
        "perps",
        "predictions",
        "earn_usdc"
      ],
      "type": "string",
      "description": "Account the money goes to (different from `from`)"
    },
    "all": {
      "type": "boolean",
      "description": "true = move everything that can be moved"
    },
    "from": {
      "enum": [
        "perps",
        "predictions",
        "earn_usdc"
      ],
      "type": "string",
      "description": "Account the money leaves: perps (trading wallet), predictions (deposit wallet) or earn_usdc (trading wallet on Base)"
    },
    "amount_usd": {
      "type": "number",
      "description": "USD to move",
      "exclusiveMinimum": 0
    }
  }
}
move_funds annotations
{
  "title": "Prepare moving money between your accounts",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
submit_operation
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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).

submit_operation input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "operation_id",
    "signatures"
  ],
  "properties": {
    "signatures": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "description": "One signature per signatures_needed step, in order: base64 P-256 for owner steps, 0x… EIP-712 for trading_key steps"
    },
    "operation_id": {
      "type": "string",
      "description": "The operation_id returned by the prepare tool"
    },
    "owner_public_key": {
      "type": "string",
      "description": "Your OWNER P-256 public key (SPKI PEM or base64). Required when the operation has Base transactions; every owner signature is then checked before anything is sent."
    }
  }
}
submit_operation annotations
{
  "title": "Execute a signed Earn / move operation",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
list_operations
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Your last Earn / move operations: what each did, step by step, and how it ended.

list_operations input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "integer",
      "maximum": 50,
      "minimum": 1,
      "description": "How many recent operations, 1–50"
    }
  }
}
list_operations annotations
{
  "title": "List your Earn / move operations",
  "readOnlyHint": true,
  "openWorldHint": true
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
861 ms
95th percentile latency
861 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 861 ms · metadata changed · 68 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http vectorial-data-terminal-mcp https://terminal.vectorialdata.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add vectorial-data-terminal-mcp --url https://terminal.vectorialdata.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable vectorial-data-terminal-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "vectorial-data-terminal-mcp": {
      "url": "https://terminal.vectorialdata.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "vectorial-data-terminal-mcp": {
      "type": "streamableHttp",
      "url": "https://terminal.vectorialdata.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start vectorial-data-terminal-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "vectorial-data-terminal-mcp": {
      "type": "http",
      "url": "https://terminal.vectorialdata.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http vectorial-data-terminal-mcp https://terminal.vectorialdata.com/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://terminal.vectorialdata.com/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "vectorial-data-terminal-mcp": {
      "serverUrl": "https://terminal.vectorialdata.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Vectorial Data Terminal MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Vectorial Data Terminal MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing