Archer MCP API
Archer's trading, research, and charting tools are exposed via the Model Context Protocol — the open standard for connecting AI agents to tools. Point any MCP-capable client (Claude, an SDK agent, your own loop) at the endpoints below.
Base URL
https://archer.tristero.com/mcp/<server>Authentication
- Every request needs
Authorization: Bearer <token>. Sign in above to get your personal key instantly; partner-grade keys with wider grants come from the team (HELP in any Archer chat). - Your token is bound server-side to your Archer identity. You never send user identifiers; any
platform/platform_idfields in your arguments are overwritten at the gateway, so a token cannot act as anyone but its own identity. - Treat the token like a private key: server-side only, never in browser code or repos. Rotation is immediate on request.
# Every request: Bearer token + both Accept types.
curl -X POST https://archer.tristero.com/mcp/hyperliquid \
-H "Authorization: Bearer $ARCHER_MCP_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Response — note the SSE framing (event:/data: lines); parse the JSON after data:. Most MCP SDKs handle this for you:
HTTP/2 200
content-type: text/event-stream
event: message
data: {"result":{"tools":[
{"name":"run_tool", "description":"Invoke any cataloged tool by name …"},
{"name":"list_tools","description":"Full searchable catalog for this server …"}
]},"jsonrpc":"2.0","id":1}Handshake
Standard MCP initialize first if your client does not send it automatically:
{"jsonrpc":"2.0","id":0,"method":"initialize","params":{
"protocolVersion":"2025-03-26","capabilities":{},
"clientInfo":{"name":"my-agent","version":"1.0"}}}
// response:
event: message
data: {"result":{"protocolVersion":"2025-03-26",
"capabilities":{"tools":{}},
"serverInfo":{"name":"proxy-hyperliquid","version":"0.0.1"}},
"jsonrpc":"2.0","id":0}Calling tools
Each server exposes two meta-tools — list_tools (a compact catalog; pass names for selected schemas or detail: "full" for an export) and run_tool (invoke by name) — so your agent's tool budget stays flat regardless of catalog size. Tool descriptions carry usage guidance your model should read.
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{
"name":"run_tool",
"arguments":{"tool":"hl_get_price","arguments":{"coin":"BTC"}}}}
// response (SSE-framed, real exchange):
event: message
data: {"result":{"content":[{"type":"text","text":
"{\n \"coin\": \"BTC\",\n \"price\": \"64852.0\",
\n \"change_24h\": \"0.85%\",
\n \"funding_rate\": \"-0.00047%\", … }"
}]},"jsonrpc":"2.0","id":2}Charts
Chart-producing tools return a chart_url; GET it for a finished PNG. Candles + volume + MAs, RSI/MACD/Bollinger panels, multi-symbol comparisons, funding-rate history, order-book depth, PnL curves — all server-rendered in Archer's house style.
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{
"name":"run_tool",
"arguments":{"tool":"hl_price_chart","arguments":{
"coin":"BTC","interval":"1d",
"indicators":["rsi","macd"],
"compare":["ETH"],"compare_style":"percent"}}}}
// result payload (inside content[0].text):
{"coins":["BTC","ETH"], "chart_type":"compare",
"chart_url":"https://…/render?coins=BTC%2CETH&…",
"scale_note":"Comparison chart plots PERCENT CHANGE …"}
// GET chart_url → finished PNG.Errors
| Status | Meaning |
|---|---|
| 401 | Missing or invalid Bearer token. Body: {"error":"missing or invalid bearer token"}. |
| 404 | Server not in your grant (or no such server). Same response either way. |
| 200 + isError:true | Transport OK; the tool itself failed. Read content[0].text — it says whether a retry can help. |
| 502 | Upstream tool server unavailable. Safe to retry with backoff. |
// Tool-level failures come back HTTP 200 with isError:true —
// inspect content[0].text, do not retry blindly:
event: message
data: {"result":{"content":[{"type":"text","text":
"Error: … guidance on whether/how to retry …"}],
"isError":true},"jsonrpc":"2.0","id":2}Money-path semantics — read this one
- Order tools queue a signed intent; nothing executes until the account owner confirms in their own Archer chat. A successful order call means queued for confirmation, not filled.
- Fills return receipts with on-chain transaction links.
- Sub-minimum orders are auto-sized to the venue minimum and say so in the result.
Servers
Default grants cover the servers below; additional surfaces (wallet, swaps, prediction markets) are enabled per arrangement.
hyperliquidMarket data, professional charts, and trading on Hyperliquid — perps, spot, and HIP-3 builder markets (equities/commodities as xyz: tickers).
hl_get_price · hl_candles · hl_orderbook · hl_funding_history · hl_price_chart · hl_market_order · hl_open_with_tp_sl · hl_get_portfolio
chartsGeneral diagram suite (line, bar, pie, treemap, and more) rendered in Archer's house style.
generate_line_chart · generate_bar_chart
fmpEquities fundamentals and market data (quotes, financials, screeners).
quote · income_statement · stock_screener
coingeckoCrypto market data across every listed asset — prices, market caps, categories.
coin_price · coin_market_chart
fredMacro series from FRED — rates, CPI, employment, money supply.
series_observations · series_search
Good-citizen notes
- Upstream venues rate-limit; batch reads and cache market metadata.
- Tool results may embed guidance notes (e.g. how to describe a comparison chart's scale). They exist because they prevent real mistakes — surface them to your model.
- The catalog evolves; re-run
list_toolsrather than pinning names forever.
