Documentation
API reference, usage examples, and pricing for AI agents and human developers.
◆ Quick Start
Add AlgoVault to Claude Desktop in under 30 seconds. Paste this into your claude_desktop_config.json:
{
"mcpServers": {
"crypto-quant-signal": {
"command": "npx",
"args": ["-y", "crypto-quant-signal-mcp"]
}
}
}
Then ask Claude:
Free tier: all supported assets, all 11 timeframes (1m–1d), 200 calls/month (up to 100/day). No signup needed. Upgrade to Starter ($9.99/mo) or Pro for higher monthly limits and unlimited funding-arb results.
Your agent can also ask AlgoVault to teach itself how to use the tools — see Knowledge Tools below.
◆ Platform
◆ Tools
Six MCP tools: a directional trade call, market-regime classification, cross-venue funding arbitrage, a multi-asset trade-call scanner, and two knowledge tools your agent can query to learn the API before calling it. Each is callable over MCP and (where flagged) the REST/x402 HTTP API, webhooks, and the Telegram bot — see Channels.
◆ Trade Call get_trade_call
Returns a composite BUY/SELL/HOLD trade call with confidence percentage, regime context, and reasoning. The exchange parameter below lists every venue this tool accepts.
Parameters
| Name | Type | Description |
|---|---|---|
| coin | string | Asset symbol. BTC, ETH, TSLA, GOLD. Required |
| timeframe | string | Candle interval. 1m 3m 5m 15m 30m 1h 2h 4h 8h 12h 1d. |
| exchange | string | Venue to query. Asset availability varies per venue — pass one explicitly to target it. HL BINANCE BYBIT OKX BITGET ASTER BINGX GATE HTX KUCOIN MEXC PHEMEX WHITEBIT BITMART XT. |
| assetClass | string | Force the engine instead of letting the router infer it from the symbol. perp equity. |
| includeReasoning | boolean | Include human-readable reasoning. Default: true |
Omit both timeframe and exchange and the router treats the call as bare: it infers the asset class from the symbol, then applies 15m on BINANCE for a perpetual. Naming either one routes to the perpetual engine explicitly.
Example Response
{
"call": "BUY",
"confidence": 78,
"price": 84250.50,
"indicators": {
"funding_rate": 0.0001,
"funding_24h_avg": 0.00008,
"funding_state": "NORMAL",
"oi_change_pct": 2.4,
"volume_24h": 2381602633,
"trend_persistence": "HIGH",
"breakout_pending": "INACTIVE"
},
"regime": "TRENDING_UP",
"reasoning": "Trending regime, upward bias. Funding pressure mild. Volatility neither expanding nor compressed. Trend persistence elevated; momentum structure. Strong conviction from aligned signals.",
"timestamp": 1712764800,
"coin": "BTC",
"timeframe": "1h",
"_algovault": {
"version": "1.10.0",
"tool": "get_trade_call",
"compatible_with": ["crypto-quant-risk-mcp", "crypto-quant-backtest-mcp"]
}
}
Response Fields
The example above is abridged. Every response carries these top-level fields.
| Field | Type | Description |
|---|---|---|
| call | string | The verdict. BUY, SELL or HOLD. |
| confidence | number | Conviction, 0–100. |
| price | number | Mark price at evaluation time, in USD. |
| indicators | object | The raw factor readings behind the verdict (funding, open-interest change, 24h volume, trend persistence, breakout state, session). |
| regime | string | TRENDING_UP, TRENDING_DOWN, RANGING or VOLATILE. |
| reasoning | string | Human-readable rationale. Omitted when includeReasoning is false. |
| timestamp | number | Unix seconds at evaluation. |
| coin | string | Echo of the resolved asset symbol. |
| timeframe | string | Echo of the resolved candle interval. |
| _algovault | object | Call metadata — server version, canonical tool name, resolved venue and its status, quota state, and the credential-resolution state. |
| _receipts | object | The audit trail for this verdict. Documented below. |
| closest_tradeable | object | Present on HOLD. The nearest higher-confidence setup, so an agent can route elsewhere instead of idling: coin, timeframe, exchange, confidence. |
| also_see | array | Present on HOLD. Same shape as closest_tradeable, as a ranked list. |
_receipts — the audit trail
Ships on every get_trade_call response. It is what makes a verdict checkable rather than merely asserted: the ledger names each factor the engine weighed, which way it pointed, and whether it moved the result.
| Field | Type | Description |
|---|---|---|
| verdict | string | The verdict this receipt explains — equals call. |
| conviction_pct | number | The conviction this receipt explains — equals confidence. |
| regime | string | The regime in force when the verdict was computed. |
| factors | array | The headline readings, each factor / direction / value. |
| factor_ledger | array | Every factor the engine weighed, in evaluation order. Each entry carries factor (the reading’s name), direction (bullish / bearish / neutral), value (the reading, formatted), contributes (boolean — whether it moved this verdict) and strength (primary / supporting / marginal / none). |
| stripped_remainder | object | What was weighed but not named: count, withheld_term_count, unnameable_this_response, unevaluated_terms, and the net direction of the remainder. |
| track_record | object | The live verdict track record at call time — pfe_win_rate, sample size n, the rolling window, and as_of. |
| verification_uri | string | Where that track record can be independently checked. |
| disclaimer | string | Informational-analytics notice carried with every verdict. |
_algovault.auth — what happened to your key
Read this before anything else when a paid key seems not to apply. A key that was presented but not accepted still returns a verdict — on the free tier — so the response looks fine and the quota is wrong. This block says so explicitly, and replaces inferring it from the quota numbers.
| Field | Type | Meaning |
|---|---|---|
| outcome | string | How the credential resolved. One of the five below. |
| presented | boolean | Whether an Authorization header was sent at all — the difference between “no key” and “a key that did not work”. |
| tier | string | The tier actually applied to this call. A paid key showing free means it was not applied. |
| outcome | Where it surfaces | Meaning |
|---|---|---|
| ABSENT | served response | No Authorization header. Free tier, working as intended. |
| RESOLVED | served response | The key was recognised and its tier applied. |
| MALFORMED | served response | A header was sent but the value is not a key shape. You are served on the free tier — check for a truncated paste or a stray Bearer. |
| UNKNOWN | refusal — error.data.auth_outcome | Well-formed but not a key we issued. The call is refused with -32003 and retryable: false rather than silently downgraded. |
| INDETERMINATE | refusal — error.data.auth_outcome | The key could not be checked right now. Refused with -32004 and retryable: true — the key was not rejected. Retry shortly. |
The three served outcomes appear in _algovault.auth.outcome; the two refusing ones never do, because the call is refused before a verdict exists — look for them in error.data.auth_outcome instead. See Errors & troubleshooting.
◆ Market Regime get_market_regime
Classifies the current market regime for any asset, on any venue this tool accepts. Returns one of four states: TRENDING_UP, TRENDING_DOWN, RANGING, or VOLATILE.
Parameters
| Name | Type | Description |
|---|---|---|
| coin | string | Asset symbol. Required |
| timeframe | string | Candle interval. 1h 4h 1d. Default: 4h |
| exchange | string | Venue to query. Asset availability varies per venue — pass one explicitly to target it. HL BINANCE BYBIT OKX BITGET ASTER BINGX GATE HTX KUCOIN MEXC PHEMEX WHITEBIT BITMART XT. Default: HL |
Example Response
{
"regime": "TRENDING_UP",
"confidence": 85,
"metrics": {
"adx_interpretation": "Strong trend",
"volatility_interpretation": "Normal",
"price_structure": "HIGHER_HIGHS",
"trend_strength": "STRONG",
"cross_venue_funding_sentiment": "BULLISH_BIAS",
"funding_divergence_note": "HL funding 3.2x above CEX avg — longs concentrated on HL"
},
"suggestion": "Strong uptrend detected. Favor long positions with trend-following strategies.",
"timestamp": 1712764800,
"coin": "BTC",
"timeframe": "4h",
"_algovault": {
"version": "1.10.0",
"tool": "get_market_regime",
"compatible_with": ["crypto-quant-risk-mcp", "crypto-quant-backtest-mcp"]
}
}
Response Fields
Transcribed from a live response. The example above is abridged; every response carries these top-level fields.
| Field | Type | Description |
|---|---|---|
| regime | string | The classification. TRENDING_UP, TRENDING_DOWN, RANGING or VOLATILE. |
| confidence | number | How strongly the metrics agree on that classification, 0–100. |
| metrics | object | The readings behind the call — ADX and its slope with plain-language interpretations, volatility ratio, price structure, pivot quality, trend strength, cross-venue funding sentiment, the underlying session, and per-venue funding under funding_by_venue. |
| suggestion | string | What the regime implies for strategy selection and position sizing, in one paragraph. |
| timestamp | number | Unix seconds at evaluation time. |
| coin | string | The asset evaluated, echoed back. |
| timeframe | string | The candle interval used, echoed back. |
| _algovault | object | Envelope metadata — version, tool, compatible_with, session_id, the resolved exchange and its venue_status, your quota, and auth (see Errors & troubleshooting). |
◆ Funding Arbitrage scan_funding_arb
Scans cross-venue funding rate differences across 7 venues: Hyperliquid, Binance, Bybit, Gate, KuCoin, Aster, and OKX. Returns top arbitrage opportunities ranked by annualized spread, with a per-leg liquidity filter so only tradeable spreads surface.
Parameters
| Name | Type | Description |
|---|---|---|
| minSpreadBps | number | Minimum spread in basis points to include. Default: 5 |
| limit | number | Max results to return. Default: 10. Free tier: max 5 |
Example Response
{
"opportunities": [
{
"coin": "ETH",
"rates": {
"HlPerp": 0.000125,
"BinPerp": -0.000042,
"BybitPerp": -0.000038
},
"bestArb": {
"longVenue": "Binance",
"shortVenue": "Hyperliquid",
"spreadBps": 13.4,
"annualizedPct": 117.3,
"direction": "Long Binance / Short Hyperliquid"
}
}
],
"scannedPairs": 245,
"timestamp": 1712764800,
"_algovault": {
"version": "1.10.0",
"tool": "scan_funding_arb",
"compatible_with": ["crypto-quant-risk-mcp", "crypto-quant-execution-mcp"]
}
}
Response Fields
Transcribed from a live response. The example above is abridged; every response carries these top-level fields.
| Field | Type | Description |
|---|---|---|
| opportunities | array | One entry per asset with a cross-venue funding spread, best first. Each carries coin, the per-venue rates, a bestArb leg (long venue, short venue, spread in bps, annualized percent, and an urgency block counting minutes to the next collection), a conviction block scoring direction consistency and spread persistence over a 24-hour sample, and nextFundingTimes per venue in epoch milliseconds. |
| scannedPairs | number | How many venue pairs were compared to produce the list — the denominator behind the ranking. |
| timestamp | number | Unix seconds at evaluation time. |
| _algovault | object | Envelope metadata — version, tool, compatible_with, session_id, your quota, and auth (see Errors & troubleshooting). |
◆ Trade Call Scanner scan_trade_calls
Scans a whole promoted-venue universe in one call and returns the top-ranked get_trade_call verdicts, ordered by a selectable lens (open interest, OI change, volume, momentum, …). One request instead of N per-asset calls — ideal for an agent building a watchlist or a scheduled digest.
Parameters
| Name | Type | Description |
|---|---|---|
| topN | number | Universe size to evaluate before ranking (1–100). Default: 20 |
| timeframe | string | Candle interval. 1m 3m 5m 15m 30m 1h 2h 4h 8h 12h 1d. Default: 15m |
| exchange | string | Venue to query. Asset availability varies per venue — pass one explicitly to target it. HL BINANCE BYBIT OKX BITGET ASTER BINGX GATE HTX KUCOIN MEXC PHEMEX WHITEBIT BITMART XT. Default: BINANCE |
| oiChangeWindow | string | Open-interest delta window for the oi_change lens. Ignored by other lenses. 1h 4h 24h. Default: 24h |
| oiBasis | string | Whether the open-interest delta is measured in notional value or in contract count. notional contracts. Default: notional |
| rankBy | string | Which slice of the venue’s assets gets evaluated. All nine lenses are listed below, with the short alias each one answers to. Default: oi |
| limit | number | Max ranked calls to return (1–100). Default: 10 |
| minConfidence | number | Drop calls below this confidence (0–100). Optional. |
| includeHolds | boolean | Include HOLD verdicts in the results. Default: false |
| includeReasoning | boolean | Attach human-readable reasoning to each call. Default: false |
| minLiquidityUsd | number | Drop assets whose 24h notional volume is below this floor, in USD. Optional. |
Ranking lenses
Every value rankBy accepts. Pass the lens or its alias — both resolve to the same universe.
| Lens | Alias | Selects |
|---|---|---|
oi (default) | — | The largest positions on the venue, by open interest. The default, and the deepest book. |
volume | vol | The most heavily traded assets over the last 24 hours, by notional. |
gainers | gain | The strongest 24-hour price gains — momentum that is already running. |
losers | lose | The steepest 24-hour price falls — where a reversal setup would form. |
movers | move | The largest absolute 24-hour move in either direction, gainers and losers together. |
funding_positive | pfr | Where longs are paying shorts most — crowded long positioning. |
funding_negative | nfr | Where shorts are paying longs most — crowded short positioning. |
volatility | atr | The widest ranges, by ATRP — ATR(14) ÷ price × 100 on the scan timeframe. |
oi_change | oid | The fastest real open-interest change, measured from the stored OI snapshots. |
Example
scan_trade_calls({
topN: 20,
timeframe: "1h",
exchange: "BINANCE",
rankBy: "oi",
limit: 10
})
// → the 10 highest-ranked assets, each a get_trade_call verdict
// (call, confidence, regime, price, indicators, _algovault)
Response Fields
The scan returns counters alongside the results, so you can tell “nothing qualified” from “nothing was scanned” without a second call.
| Field | Type | Meaning |
|---|---|---|
| scanned | number | How many assets were evaluated. |
| eligible_non_hold | number | How many produced a BUY or a SELL. |
| holds | number | How many produced a HOLD. |
| errors | number | A count of venue errors during the scan — not a detail object. |
| partial | boolean | True when a venue timed out and the scan is therefore incomplete. Treat the counters as a floor. |
| calls | array | The ranked results. Each entry carries coin, timeframe, exchange, call, confidence and regime. |
{
"scanned": 30,
"eligible_non_hold": 1,
"holds": 29,
"errors": 0,
"partial": false,
"calls": [
{ "coin": "BTC", "timeframe": "1h", "exchange": "BINANCE",
"call": "BUY", "confidence": 57, "regime": "TRENDING_UP" }
]
}
An empty calls array is the ordinary outcome
Most assets are HOLD most of the time, and includeHolds defaults to false — so a scan that filters every result out is working correctly, not failing. A live 30-asset scan on 1h at the time of writing returned 29 HOLD against 1 actionable call.
Read scanned to confirm the universe was evaluated. To widen the result set, lower minConfidence, or set includeHolds: true to see the HOLD verdicts alongside the rest.
Each result carries the same shape as get_trade_call. A scan charges one unit per returned result, minimum 1. Quota is counted per call, regardless of verdict. x402 is a flat $0.02/scan.
◆ Knowledge Chat chat_knowledge
Ask AlgoVault a natural-language question — get a synthesized answer with citations, grounded in the canonical knowledge bundle (every MCP tool description, response shape, integration tutorial, and code example). Use this when you need an explanation, code pattern, or "how do I" answer. For raw ranked snippets without LLM synthesis, use search_knowledge (faster, no quota cost).
Parameters
| Name | Type | Description |
|---|---|---|
| question | string | Natural-language question (5–500 chars). Required |
| model | string | Optional model override. claude-haiku-4-5-20251001 (default), claude-sonnet-4-6 |
Response Fields
Transcribed from a live response.
| Field | Type | Description |
|---|---|---|
| question | string | Your question, echoed back. |
| answer | string | The synthesized answer, grounded in the knowledge bundle. |
| citations | array | What the answer was built from. Each entry carries title, excerpt, source_type and source_url. Check these before acting on the answer. |
| model | string | Which model produced the answer — the default, or the override you passed. |
| _algovault | object | Envelope metadata — the bundle_version and bundle_generated_at the answer was grounded in, quota_remaining for the monthly chat allowance, and auth. A chat call refused for quota returns CHAT_QUOTA_EXHAUSTED instead — see Errors & troubleshooting. |
◆ Knowledge Search search_knowledge
Ask AlgoVault any question about its MCP tools, response shapes, integration patterns (LangChain / LlamaIndex / MAF / CrewAI), or code examples. Returns ranked snippets from the canonical knowledge bundle. Use this BEFORE attempting any tool call to confirm correct parameter usage and avoid hallucinating tool shapes. Fast (BM25 lexical search, no LLM call, no quota cost). For natural-language synthesized answers, use chat_knowledge instead.
Parameters
| Name | Type | Description |
|---|---|---|
| query | string | Natural-language search query (3–500 chars). Required |
| limit | number | Max ranked results (1–50). Default: 10 |
Response Fields
Transcribed from a live response.
| Field | Type | Description |
|---|---|---|
| query | string | Your query, echoed back. |
| total_results | number | How many ranked snippets were returned — at most your limit. |
| results | array | The ranked snippets, best first. Each carries id, a BM25 score, title, excerpt, source_type and source_url. Read the excerpt before calling the tool it describes. |
| _algovault | object | Envelope metadata — the bundle_version and bundle_generated_at searched, plus auth. This tool costs no quota, so it carries no quota block. |
◆ When to use which
| Use case | Pick | Why |
|---|---|---|
| Param lookup before tool call | search_knowledge | Free, fast (no LLM call), returns the exact describe-text snippet. |
| "How do I integrate with X" | search_knowledge | Integration tutorials are indexed verbatim. BM25 ranks the right tutorial first. |
| Compare two tools | chat_knowledge | Synthesis across multiple snippets needs an LLM. Cited answer beats raw retrieval. |
| "Write me code for X" | chat_knowledge | Pattern synthesis from code examples needs reasoning. Free tier covers 10/month. |
◆ Worked examples
1. Discovery query — agent asks for trade-call docs before calling get_trade_call:
search_knowledge({
query: "how do I get a trade call with stop loss for BTC"
})
// → ranked snippets including get_trade_call describe-text + integration excerpts
2. Comparison query — ask for synthesis across two tool descriptions:
chat_knowledge({
question: "what's the difference between get_trade_call and get_market_regime"
})
// → synthesized answer with [source: ...] citations
3. Integration discovery — agent finds the LangChain tutorial:
search_knowledge({
query: "how do I integrate with LangChain"
})
// → LangChain integration tutorial ranks first, with full code snippet
4. Direct HTTP — search:
curl -X POST https://api.algovault.com/api/search \
-H "Content-Type: application/json" \
-d '{"query":"BTC stop loss","limit":3}'
# → { "query": "BTC stop loss", "total_results": 3, "results": [...], "_algovault": {...} }
5. Direct HTTP — chat:
curl -X POST https://api.algovault.com/api/chat \
-H "Content-Type: application/json" \
-d '{"question":"how do I get a BTC trade call","model":"claude-haiku-4-5-20251001"}'
# → { "question": "...", "answer": "...", "citations": [...], "model": "...", "_algovault": {...} }
◆ Rate limits & cost
| Tier | search_knowledge | chat_knowledge | Notes |
|---|---|---|---|
| Free | Unlimited | 10 / month | Search is BM25-only, no LLM cost. |
| Starter | Unlimited | 50 / month | Default model: claude-haiku-4-5-20251001. |
| Pro | Unlimited | 200 / month | Adds claude-sonnet-4-6 upgrade option. |
| Enterprise | Unlimited | 2000 / month | Custom limits available. |
Cost transparency: chat_knowledge costs about $0.002 per call with prompt caching. Quota resets at the first of each UTC month.
◆ Errors & troubleshooting
Every failure this API can return, what it means, and what to change. Verified against the live server.
Failures arrive in two shapes — check both
Check response.error first. If it is absent, check response.result.isError.
A parameter validation failure returns HTTP 200 with result.isError: true and the code as plain text inside result.content[0].text — there is no error object at all. A client that only inspects error reads that failure as a success, then fails again trying to parse the message as a verdict. This is the single most common cause of a working integration appearing broken.
| Code | Where to read it | What it means — and what to do |
|---|---|---|
| -32602 | result.isError — code in result.content[0].text | Invalid parameter: a value outside an enum, or a required field missing. The message carries an options array listing exactly what that parameter accepts — read it rather than guessing. |
| -32003 | response.error.code | The API key was not recognised. Check it on your account page, or drop the Authorization header entirely to use the free tier. error.data.retryable is false: retrying will not help. |
| -32004 | response.error.code | The key could not be verified right now — it was not rejected. error.data.retryable is true: retry shortly and treat it as transient, never as a bad key. |
| HTTP 406 | HTTP status, plus error.code -32000 | The Accept header is incomplete. Send both values: Accept: application/json, text/event-stream. |
A venue outside the exchange list is a -32602, not an outage. The published list is the set with a live track record; venues without one are not accepted.
◆ Channels
Four ways to reach the same engine: the MCP server, the REST / x402 HTTP API, outbound webhooks, and the Telegram bot. Pick the surface that fits your stack — each links to a dedicated guide.
◆ MCP Server
Connect over the Model Context Protocol at https://api.algovault.com/mcp. Any MCP-compatible client (Claude Desktop, Cursor, Cline, Claude Code) handles the protocol for you. See Connect Your MCP Client for per-client setup. Wiring a non-MCP system? POST tools/call directly. The transport is stateless, so there is no initialize step and no session id to thread:
AV_KEY="av_live_..." # paste your API key
curl -sS -X POST https://api.algovault.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer $AV_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_trade_call","arguments":{"coin":"BTC","timeframe":"15m","exchange":"BINANCE"}}}'
No key? Drop the Authorization header and the same call runs on the free tier.
Send both Accept types. The header must list application/json and text/event-stream. Sending only the first returns:
{"jsonrpc":"2.0","error":{"code":-32000,"message":"Not Acceptable: Client must accept both application/json and text/event-stream"},"id":null}
Parse twice. The reply is an SSE frame. The verdict is a JSON string nested at result.content[0].text. Strip the data: prefix, then decode the inner payload:
curl -sS -X POST https://api.algovault.com/mcp \
-H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_trade_call","arguments":{"coin":"BTC"}}}' \
| sed -n 's/^data: //p' | head -1 | jq -r '.result.content[0].text' | jq
The same call in Python. Both parses in one place — the SSE frame, then the verdict string inside it. No MCP client library, no handshake, no session id.
import json, requests
r = requests.post(
"https://api.algovault.com/mcp",
headers={
"Content-Type": "application/json",
# both values, or the server answers 406
"Accept": "application/json, text/event-stream",
# optional — omit entirely to use the free tier
# "Authorization": "Bearer av_live_...",
},
json={"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {"name": "get_trade_call",
"arguments": {"coin": "BTC", "timeframe": "1h"}}},
timeout=30,
)
# 1st parse — the reply is an SSE frame; the payload is the line after "data: "
envelope = json.loads(next(l[6:] for l in r.text.splitlines() if l.startswith("data: ")))
# failures arrive in TWO shapes — check both before reading a verdict
if "error" in envelope:
raise SystemExit(envelope["error"]) # -32003 / -32004
if envelope["result"].get("isError"):
raise SystemExit(envelope["result"]["content"][0]["text"]) # -32602, as text
# 2nd parse — the verdict is a JSON *string* inside the tool result
verdict = json.loads(envelope["result"]["content"][0]["text"])
print(verdict["call"], verdict["confidence"], verdict["regime"])
print(verdict["_algovault"]["auth"]) # ABSENT / RESOLVED / MALFORMED
Optional: the full MCP session handshake. You do not need this to call a tool. It is kept for clients that speak full MCP session semantics. It also reproduces what an MCP client does internally:
AV_KEY="av_live_..." # paste your API key
# 1. initialize — reads a session id from the response headers, if the server issues one
SESSION_ID=$(curl -sS -i -X POST https://api.algovault.com/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AV_KEY" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}},"id":1}' \
| awk 'BEGIN{IGNORECASE=1} /^mcp-session-id:/ {gsub(/\r/,""); print $2; exit}')
# 2. notify "initialized"
curl -sS -X POST https://api.algovault.com/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AV_KEY" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: $SESSION_ID" \
-d '{"jsonrpc":"2.0","method":"notifications/initialized"}' >/dev/null
# 3. call the tool
curl -sS -X POST https://api.algovault.com/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $AV_KEY" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: $SESSION_ID" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_trade_call","arguments":{"coin":"SOL","timeframe":"5m","exchange":"BINANCE"}},"id":2}'
The stateless server issues no session id, so SESSION_ID stays empty and the header is ignored. Every call above still succeeds.
◆ REST API
Two keyless / keyed HTTP rails for non-MCP consumers: x402 pay-per-call (USDC on Base, no signup) for autonomous agents, and plain API-key POST endpoints for the knowledge tools. Base URL https://api.algovault.com.
x402 Pay-Per-Call (USDC on Base)
No signup. No API key. No billing. Your agent pays per HTTP call with USDC on Base — the payment receipt is the credential. Works with any x402-compatible client or wallet.
How it works
- Call the endpoint — your agent POSTs to an x402 route (e.g.
/x402/get_trade_call) with no payment attached. - Receive a 402 quote — the server replies
402 Payment Requiredwith the price, asset (USDC), network (Base), and recipient address. - Sign & retry — your x402 client signs an ERC-3009
transferWithAuthorizationand retries with the signedX-PAYMENTheader. The facilitator submits it on-chain, so your agent pays no gas. - Get your verdict — the server verifies the signature and returns the result immediately; settlement confirms on Base in ~2 seconds.
Quick start (TypeScript)
The official x402-fetch client wraps fetch and runs the 402 → sign → retry handshake for you. Your wallet just needs USDC on Base.
// npm i x402-fetch viem
import { wrapFetchWithPayment } from "x402-fetch";
import { createWalletClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { base } from "viem/chains";
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const wallet = createWalletClient({ account, chain: base, transport: http() });
const fetchWithPay = wrapFetchWithPayment(fetch, wallet);
// Pays automatically on the 402, then returns the verdict.
// content-type: set it EXACTLY once. x402-fetch wraps raw fetch, which would send a string
// body as text/plain — so here you must set it. Circle's GatewayClient.pay() is the opposite:
// it sets Content-Type itself, so passing your own merges into "application/json,
// application/json" and the server replies 400 invalid_content_type (you are not charged).
const res = await fetchWithPay("https://api.algovault.com/x402/get_trade_call", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ coin: "BTC", timeframe: "1h" }),
});
const verdict = await res.json();
console.log(verdict.call, verdict.confidence); // e.g. "BUY" 72
Set content-type exactly once
The two common x402 clients have opposite requirements, and getting it wrong produces the same 400 invalid_content_type after your payment has already verified (you are not charged):
x402-fetchwraps rawfetch, which sends a string body astext/plain— so you must passcontent-type: application/jsonyourself, as above.- Circle's
GatewayClient.pay()(the Circle Gateway rail advertised on every 402) already setsContent-Type— so you must not. Adding your own leaves both capitalisations in the options object;fetchthen merges them intoapplication/json, application/json, which no JSON parser accepts. Passbodyas a plain object and omitheadersentirely.
Endpoints & pricing
| Endpoint | Price / call |
|---|---|
POST /x402/get_trade_call | $0.02 (HFT 1m–5m: up to $0.05) |
POST /x402/scan_funding_arb | $0.01 |
POST /x402/get_market_regime | $0.02 |
Base URL https://api.algovault.com.
New to x402? The open protocol spec and client libraries (x402-fetch, x402-axios) live at x402.org.
HTTP API (search & chat)
Both tools also expose plain HTTP endpoints for non-MCP consumers. Send a JSON body, read a JSON response — no JSON-RPC envelope, no dual Accept header, no SSE to unwrap.
Trade calls are served over POST /mcp and the /x402/* routes. There is no separate /api/trade-call endpoint.
| Endpoint | Body | Cache |
|---|---|---|
POST /api/search | {"query": "string", "limit": 10} | public, max-age=300 |
POST /api/chat | {"question": "string", "model": "..."} | no-store (per-user) |
Error contract: INVALID_QUERY / QUERY_TOO_SHORT / QUERY_TOO_LONG / INVALID_QUESTION / QUESTION_TOO_SHORT / QUESTION_TOO_LONG / INVALID_MODEL / CHAT_QUOTA_EXHAUSTED / INTERNAL_ERROR. All return JSON {"code": "...", "message": "..."}.
◆ Webhooks
Stop polling. Register an HTTPS endpoint and AlgoVault POSTs you a signed event the instant a new trade call fires, the regime shifts, or a scheduled scan completes — every delivery is HMAC-signed, idempotent, and retried. Needs a free or paid av_live_ key (get one in your account).
Events
trade_call | A new BUY/SELL trade call is recorded for an asset you track. |
regime_shift | The market regime for (coin, timeframe, exchange) changes vs the previous call. |
scan_digest | A scheduled scan completes — the ranked top-N calls for a timeframe/exchange at your chosen cadence. |
Subscribe
curl -X POST https://api.algovault.com/api/webhooks \
-H "Authorization: Bearer av_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-server.com/hook",
"events": ["trade_call", "regime_shift"],
"timeframes": ["15m", "1h"],
"assets": ["BTC", "ETH", "top:25"],
"min_confidence": 60
}'
Filters are optional — omit them to receive every call. assets accepts coin symbols or a top:N token (N 1–100); min_confidence is 0–100. For scan_digest add timeframe, exchange, top_n (1–100) and cadence (1h/4h/1d). The response includes a per-subscription secret — store it to verify signatures.
Manage
GET /api/webhooks | List your active subscriptions. |
DELETE /api/webhooks/:id | Remove a subscription. |
POST /api/webhooks/:id/test | Send a sample delivery to your endpoint to verify wiring. |
Delivery & signature
Each delivery is a POST to your URL with these headers:
X-AlgoVault-Event | The event type. |
X-AlgoVault-Delivery | Unique delivery id — use it as an idempotency key. |
X-AlgoVault-Timestamp | Unix seconds; reject deliveries outside your tolerance to stop replays. |
X-AlgoVault-Signature | HMAC-SHA256(secret, "{timestamp}.{rawBody}") in hex — recompute and constant-time compare before trusting a payload. |
{
"event": "trade_call",
"delivery_id": "d_8f3c...",
"data": {
"type": "trade_call",
"coin": "BTC",
"timeframe": "15m",
"exchange": "BINANCE",
"call": "BUY",
"confidence": 72,
"regime": "TRENDING_UP",
"verify_url": "https://algovault.com/verify?id=..."
}
}
Endpoint URLs must be HTTPS (SSRF-guarded; internal addresses are rejected). Full reference — payload schemas, retry/backoff, and self-healing — in docs/WEBHOOKS.md →
◆ Telegram Bot
Trade calls delivered straight to Telegram — no client, no key. Start the bot, ask for a composite verdict in chat, or subscribe to push alerts for regime shifts and new calls. Free tier works out of the box.
◆ Ecosystem
Drop AlgoVault into what you already run — MCP clients, agent frameworks, exchange execution kits, and hosted trading platforms — plus ready-made skills and 20 worked examples.
◆ Integration
Connect AlgoVault to your existing tools. Pick your surface below; each links to a step-by-step guide at /integrations.
◆ Connect Your MCP Client
Your av_live_… API key works across every MCP-compatible client. Pick yours below. Free tier (no key) also works for every coin + every timeframe, capped at 200 calls/month, and at 100 calls per UTC day.
| Surface | Setup | What you get |
|---|---|---|
| Claude Desktop | Settings → Connectors → Add custom connector, or edit claude_desktop_config.json |
Native Streamable-HTTP MCP. AlgoVault tools (get_trade_call, scan_funding_arb, get_market_regime) callable in any chat. |
| Cursor | Edit ~/.cursor/mcp.json (global) or .cursor/mcp.json (project) |
IDE-native MCP. Cursor's coding agent pulls live signals while editing strategy code. |
| Cline (VSCode) | Cline panel → MCP Servers → Remote Servers tab, or edit cline_mcp_settings.json |
VSCode-side coding agent with AlgoVault tools available. |
| Claude Code | claude mcp add --transport http … --header … — or commit .mcp.json to repo root |
Per-project MCP. Useful for backtest / strategy-dev repos. Team-shared via .mcp.json. |
| Smithery | npx -y @smithery/cli install crypto-quant-signal-mcp --client <name> |
Auto-managed connection via Smithery registry. Easiest install across clients. |
| Plain HTTP / curl | curl -X POST https://api.algovault.com/mcp … |
Raw JSON-RPC. For developers integrating into bots, scripts, or non-MCP services. |
| Codex | Add [mcp_servers.algovault] to ~/.codex/config.toml |
Coding agent for terminal and IDE. AlgoVault tools available in every Codex session. |
| Kimi Code | Add a url entry to ~/.kimi-code/mcp.json, or run /mcp-config |
Moonshot’s coding agent. Pulls AlgoVault verdicts while you edit strategy code. |
| ZCode (GLM) | Settings → MCP Servers → New MCP Server → HTTP, then paste the URL |
Z.ai’s GLM harness. AlgoVault verdicts alongside the GLM model family. |
| DeepSeek Harness | Insert one entry in cordis.patch.yml — the dsh CLI already ships the MCP bridge |
DeepSeek’s own agent runtime. AlgoVault tools arrive as mcp__algovault__*; the free tier needs no key. |
| Z.ai API | Pass type: "mcp" in the tools array on chat/completions |
No app to install. Z.ai reaches AlgoVault server-side while it answers. |
| DeepSeek | Point Claude Code at https://api.deepseek.com/anthropic, then add AlgoVault as usual |
Bring your own model. DeepSeek does the thinking; your existing harness carries the AlgoVault tools. |
Claude Desktop — setup walkthrough
Easiest path (UI): Open Claude Desktop → Settings → Connectors → Add custom connector. Name it AlgoVault. URL: https://api.algovault.com/mcp?src=docs. Add Authorization: Bearer av_live_… as a custom header (paid tier). Save and restart Claude Desktop.
JSON path: Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"algovault": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.algovault.com/mcp?src=docs",
"--header", "Authorization: Bearer ${AV_API_KEY}",
"--header", "X-AlgoVault-Track-Token:chan-docs"]
}
}
}
Set AV_API_KEY in the env block or your shell. Free tier: drop the Authorization header, but keep the X-AlgoVault-Track-Token header.
Verify: ask Claude "Get me a trade call for BTC on the 1h timeframe". Tool indicator appears bottom-right of the input box.
Cursor — setup walkthrough
Edit ~/.cursor/mcp.json (global, all projects) or .cursor/mcp.json in the project root (per-project, commit-friendly):
{
"mcpServers": {
"algovault": {
"url": "https://api.algovault.com/mcp?src=docs",
"headers": {
"Authorization": "Bearer ${env:AV_API_KEY}",
"X-AlgoVault-Track-Token": "chan-docs"
}
}
}
}
Set AV_API_KEY in your shell. Restart Cursor. The Cursor agent now has AlgoVault tools available while editing strategy code.
Cline (VSCode) — setup walkthrough
Open the Cline panel in VSCode → MCP Servers → Remote Servers tab → Add server. Or edit cline_mcp_settings.json (path varies by OS; access via Configure MCP Servers):
{
"mcpServers": {
"algovault": {
"type": "streamableHttp",
"url": "https://api.algovault.com/mcp?src=docs",
"headers": {
"Authorization": "Bearer ${env:AV_API_KEY}",
"X-AlgoVault-Track-Token": "chan-docs"
},
"disabled": false,
"autoApprove": []
}
}
}
type: "streamableHttp" is the modern transport (recommended). The legacy "sse" type still works but is being deprecated upstream.
Claude Code — setup walkthrough
One-liner (recommended):
claude mcp add --transport http --scope project algovault https://api.algovault.com/mcp?src=docs \
--header "Authorization: Bearer $AV_API_KEY" \
--header "X-AlgoVault-Track-Token:chan-docs"
This writes a .mcp.json in your repo root which you can commit so every teammate gets the same MCP config:
{
"mcpServers": {
"algovault": {
"type": "http",
"url": "https://api.algovault.com/mcp?src=docs",
"headers": {
"Authorization": "Bearer ${AV_API_KEY}",
"X-AlgoVault-Track-Token": "chan-docs"
}
}
}
}
Verify: in Claude Code, run /mcp to list connected servers; AlgoVault should appear with its tools.
Smithery — setup walkthrough
The Smithery CLI installs and configures the MCP server in your client of choice automatically:
# Pick one — replace <client> with: claude, cursor, cline, claude-code
npx -y @smithery/cli install crypto-quant-signal-mcp --client <client>
The CLI writes the right config file for your client and prompts for any required env vars (like AV_API_KEY for paid-tier access). Easiest path if you're new to MCP. Browse the AlgoVault listing at smithery.ai.
Plain HTTP / curl — advanced testing
For non-MCP integrations (bots, scripts, services), call the JSON-RPC endpoint directly. The transport is stateless, so a single POST of tools/call works: no initialize, no session id. See Testing with raw HTTP / curl for the one-shot call, the two Accept types you must send, and the optional session handshake.
One-shot smoke (free tier, no auth):
curl -sS https://api.algovault.com/health
Returns {"status":"ok","version":"1.10.3","stripe":true}.
Codex — setup walkthrough
Codex reads MCP servers from ~/.codex/config.toml. Add a table for AlgoVault:
[mcp_servers.algovault]
url = "https://api.algovault.com/mcp?src=docs"
bearer_token_env_var = "AV_API_KEY"
[mcp_servers.algovault.http_headers]
"X-AlgoVault-Track-Token" = "chan-docs"
Set AV_API_KEY in your shell for paid tier; drop bearer_token_env_var for free tier. Note that codex mcp add covers local stdio servers only, so remote HTTP servers are configured in the file.
IDE extension: open settings, choose MCP servers, add a server, pick Streamable HTTP and paste the same URL.
Verify: ask Codex "Get me a trade call for BTC on the 1h timeframe".
Kimi Code — setup walkthrough
Edit ~/.kimi-code/mcp.json (user level) or .kimi-code/mcp.json (project level). An entry carrying a url and no transport is an HTTP server:
{
"mcpServers": {
"algovault": {
"url": "https://api.algovault.com/mcp?src=docs",
"bearerTokenEnvVar": "AV_API_KEY",
"headers": {
"X-AlgoVault-Track-Token": "chan-docs"
}
}
}
}
Prefer the guided path? Run /mcp-config in the TUI to add, edit or delete servers without touching the JSON.
Verify: ask Kimi "Get me a trade call for BTC on the 1h timeframe".
ZCode (GLM) — setup walkthrough
Open Settings → MCP Servers, then click New MCP Server at the top right. Choose HTTP as the type and enter:
https://api.algovault.com/mcp?src=docs
For paid tier, expand Headers (optional) and add Authorization: Bearer av_live_…. Free tier needs no header.
ZCode also accepts a pasted config block under Full configuration, in either the {"mcpServers": {…}} or the bare {"server-name": {…}} shape.
Verify: ask ZCode "Get me a trade call for BTC on the 1h timeframe".
DeepSeek Harness — setup walkthrough
One step: patch the profile. There is no plugin to install — the dsh CLI ships @deepseek-ai/dsh-mcp-client in its own dependency closure, and the bridge’s README says one entry per server is the entire setup.
The bundles are a red herring: base, headless and web-app declare zero MCP dependencies, but a bare plugin name resolves through the profile’s Node parent walk to $DSH_HOME/profiles/node_modules, which the CLI closure feeds. Nothing is enabled by default because DSH treats each server as trusted code outside the sandbox — the entry below is the opt-in.
Edit ~/.dsh/profiles/<name>/cordis.patch.yml, or ~/.dsh/cordis.patch.yml for every profile:
- insert:
- id: mcp-algovault
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: algovault
transport: streamable-http
url: https://api.algovault.com/mcp?src=deepseek_harness
headers:
X-AlgoVault-Track-Token: int-deepseek-harness
The - insert: wrapper is required. Without it the entry is an id-targeted override, and it is skipped with a warning. The bridge’s own README shows the unwrapped form because it documents the plugin config shape, not a cordis.patch.yml edit.
Paid tier adds one more line to that headers block: Authorization: Bearer av_live_…. The free tier needs no key.
The tools arrive server-qualified — mcp__algovault__get_trade_call, mcp__algovault__scan_trade_calls, and the rest.
DSH bridges tools only. MCP resources and prompts are deferred upstream, so read the track record at algovault.com/track-record instead.
Verify: ask dsh "Get me a trade call for BTC on the 1h timeframe".
Verified against dsh 0.1.1-rc.2 on 2026-08-29. DSH ships prereleases only; expect compatibility-breaking changes.
Z.ai API — server-side, no client needed
Z.ai dials the MCP server itself, so there is nothing to install locally. Declare AlgoVault as a tool on the request:
{
"model": "glm-4.6",
"messages": [{"role": "user", "content": "Trade call for BTC on the 1h timeframe"}],
"tools": [{
"type": "mcp",
"mcp": {
"server_label": "algovault",
"server_url": "https://api.algovault.com/mcp?src=docs",
"headers": {"X-AlgoVault-Track-Token": "chan-docs"}
}
}]
}
server_label is required. transport_type is optional and already defaults to streamable-http, so it is omitted above. Add allowed_tools to narrow the tool set.
DeepSeek — bring your own model
DeepSeek’s own harness connects to AlgoVault directly — see the DeepSeek Harness tutorial. This row is the other path: keep the harness you already run and swap the model behind it. The DeepSeek API itself still exposes no MCP parameter, so the harness carries the tools.
export ANTHROPIC_BASE_URL="https://api.deepseek.com/anthropic"
export ANTHROPIC_AUTH_TOKEN="$DEEPSEEK_API_KEY"
claude mcp add --transport http --scope project algovault \
https://api.algovault.com/mcp?src=docs \
--header "X-AlgoVault-Track-Token:chan-docs"
Claude Code then runs against DeepSeek while AlgoVault stays connected exactly as it would otherwise. Verdicts are unchanged: they are computed on our side and handed back as JSON.
Harnesses that speak the OpenAI protocol instead use the plain https://api.deepseek.com base, not the /anthropic one shown here.
Config formats verified per client against: MCP quickstart · Cursor MCP docs · Cline remote-server docs · Claude Code MCP docs · @smithery/cli on npm · Codex MCP docs · Kimi Code MCP docs · ZCode MCP docs · Z.ai MCP-call docs · DeepSeek Anthropic API. Config formats can drift — if a snippet here doesn't work, please refer to the upstream doc and report it at GitHub issues.
◆ Connect Your AI Agent
Building on a major agent framework? AlgoVault MCP plugs into 4 of them via the framework's canonical MCP-adapter library. Each pairing ships with a runnable Python demo.
| Framework | Setup | What you get |
|---|---|---|
| LangChain | pip install langchain-mcp-adapters · MultiServerMCPClient with streamable HTTP |
AlgoVault tools as LangChain BaseTool objects in any create_react_agent or LangGraph workflow. |
| LlamaIndex | pip install llama-index-tools-mcp · BasicMCPClient + McpToolSpec |
AlgoVault tools as LlamaIndex FunctionTool objects in any FunctionAgent or ReActAgent. |
| Microsoft Agent Framework | pip install agent-framework · MCPStreamableHTTPTool(url=…) |
AlgoVault tools called directly or handed to any ChatAgent in the MAF ecosystem. |
| CrewAI | pip install crewai 'crewai-tools[mcp]' · MCPServerAdapter |
AlgoVault tools as CrewAI BaseTool objects in any Crew or single Agent workflow. |
LangChain — setup walkthrough
Install the canonical bridge maintained by LangChain:
pip install langchain-mcp-adapters
Connect once, then call tools from any LangChain agent:
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({"algovault": {
"url": "https://api.algovault.com/mcp",
"transport": "streamable_http"}})
tools = await client.get_tools()
verdict = await tools[0].ainvoke({"coin": "BTC", "timeframe": "4h"})
LlamaIndex — setup walkthrough
Install the canonical bridge maintained by LlamaIndex:
pip install llama-index-tools-mcp
Call directly via BasicMCPClient, or adapt its tools to FunctionTool via McpToolSpec:
from llama_index.tools.mcp import BasicMCPClient
client = BasicMCPClient("https://api.algovault.com/mcp")
result = await client.call_tool(
"get_trade_call", {"coin": "BTC", "timeframe": "4h"})
Microsoft Agent Framework — setup walkthrough
Install the framework (MCP support is built in):
pip install agent-framework
Open an MCP session, call tools directly, or hand the tool to a ChatAgent:
from agent_framework import MCPStreamableHTTPTool
tool = MCPStreamableHTTPTool(
name="algovault",
url="https://api.algovault.com/mcp",
load_prompts=False)
async with tool:
contents = await tool.call_tool(
"get_trade_call", coin="BTC", timeframe="4h")
Note: load_prompts=False matters because AlgoVault MCP is tools-only.
CrewAI — setup walkthrough
Install CrewAI with the MCP extras (the canonical adapter):
pip install crewai 'crewai-tools[mcp]'
Open the adapter as a context manager; all 4 AlgoVault tools land as CrewAI BaseTool objects:
from crewai_tools import MCPServerAdapter
server_params = {"url": "https://api.algovault.com/mcp",
"transport": "streamable-http"}
with MCPServerAdapter(server_params) as tools:
raw = tools[0].run(coin="BTC", timeframe="4h", exchange="BINANCE")
Tutorials verified 2026-05-18 against: langchain-mcp-adapters · llama-index-tools-mcp · agent-framework · crewAI-tools MCP. Snippets can drift — if one doesn't work, please refer to the upstream doc and report it at GitHub issues.
Try a framework integration: algovault.com/integrations/langchain
◆ Connect Your Exchange Kit
Already running an exchange's Agent Trade Kit? Pair AlgoVault's composite verdict with the kit's execution layer. AlgoVault returns analytics; the exchange kit places orders; your agent decides.
| Exchange | Setup | What you get |
|---|---|---|
| Binance | npx skills add https://github.com/binance/binance-skills-hub · Spot Testnet execution |
Composite verdict + official Binance Skills Hub, on the direct API path. You issue keys and sign requests; the demo runs against Spot Testnet. |
| Binance Agent OS | claude mcp add binance-mcp-server --transport http https://agent.binance.com/mcp/agentic · OAuth, no API keys |
Your agent asks AlgoVault what to do and Binance to do it. No API keys on the machine, no HMAC signing, and no withdrawal scope exists. |
| OKX | npx -y @okx_ai/okx-trade-mcp · 83 execution tools (spot, swap, futures, options, grid) |
Composite verdict + OKX's full execution surface. Agent reads signals, places orders across spot or derivatives via one MCP server. |
| Bybit | npx -y bybit-official-trading-server · Linear Perpetual + conditional orders |
Composite verdict + Bybit's official MCP server. Agent fetches AlgoVault signals, places perpetual + conditional orders via Bybit testnet. |
| Bitget | npx -y bitget-mcp-server · GetClaw agent-native execution |
Composite verdict + Bitget's MCP server inside a dedicated AI account. Agent-native execution; isolate from your main funds. |
| Gemini | node packages/mcp-server/dist/index.js · Self-hosted Node MCP (Apache-2.0), sandbox-gated |
Composite verdict + Gemini's Agentic Trading MCP. Agent reads signals, places sandbox orders via gemini_new_order; subaccounts isolate each agent. |
| Kraken | kraken mcp -s all · Single Rust binary (MIT), 151 commands, keyless paper engine |
Composite verdict + the Kraken CLI's stdio MCP. Agent reads signals, simulates orders on the keyless paper engine before going live. |
| Alpaca | uvx alpaca-mcp-server · Crypto toolsets, paper venue default-on |
Composite verdict + Alpaca's crypto MCP Server. Agent reads signals, places notional BTC/USD paper orders via place_crypto_order. |
| Hyperliquid | pip install hyperliquid-python-sdk · official Python SDK (no official npm SDK) |
Composite verdict + Hyperliquid's testnet perps API. Keyless demo builds the exact EIP-712 order action and prints it — nothing is signed or sent. |
| Aster | pip install git+https://github.com/asterdex/aster-connector-python.git · git-install only |
Composite verdict + Aster's futures testnet on BNB Chain Testnet. V3 EIP-712 auth; V1 API-key creation closed 2026-03-25. |
| BingX | No SDK to install · plain fetch + node:crypto against the VST demo host |
Composite verdict + BingX's VST demo-trading environment. Dry-run order validation plus an API-callable demo-funds faucet. |
| KuCoin | npm install kucoin-universal-sdk · the only non-archived official SDK |
Composite verdict + KuCoin Futures order VALIDATION. KuCoin retired its sandbox in 2023, so this validates payloads rather than simulating fills. |
| Gate.io | pip install gate-api · official SDK 7.2.100 (PyPI + npm) |
Composite verdict + Gate.io's futures testnet. Keyless demo converts coins to CONTRACTS from the live quanto_multiplier and prints the order — nothing is signed or sent. |
Binance — setup walkthrough
On Binance Agent OS? That path needs no API keys — OAuth, an isolated Agentic sub-account, and no withdrawal scope. Start there instead →
For the direct API path, install AlgoVault’s plugin and the Binance Skills Hub:
claude plugin install AlgoVaultLabs/algovault-skills
npx skills add https://github.com/binance/binance-skills-hub
Your agent now has AlgoVault's analytics tools and Binance's execution tools side-by-side. Set BINANCE_TESTNET=true for zero real-money risk during development.
Keep this path for custom order types, non-MCP runtimes, or a deterministic backtest harness.
Binance Agent OS — setup walkthrough
Add both servers to one MCP client — AlgoVault decides, Binance executes:
claude mcp add binance-mcp-server --transport http https://agent.binance.com/mcp/agentic
claude mcp add --transport http --scope project algovault \
https://api.algovault.com/mcp?src=binance_agent_os
Authenticate Binance through /mcp and grant the least scope you need: market data, account, trade or transfer. Trading runs inside an isolated Agentic sub-account you fund yourself.
Name the tool you want. An exchange-shaped prompt routes to Binance and never reaches the verdict, so ask for get_trade_call explicitly.
OKX — setup walkthrough
Install OKX's official trade MCP server in your client config:
{
"mcpServers": {
"algovault": {"url": "https://api.algovault.com/mcp"},
"okx-trade": {"command": "npx", "args": ["-y", "@okx_ai/okx-trade-mcp"]}
}
}
Set OKX_DEMO=true (or pass --demo) for the demo trading environment. Real keys go in env vars; never commit them.
Bybit — setup walkthrough
Wire Bybit's official server next to AlgoVault:
{
"mcpServers": {
"algovault": {"url": "https://api.algovault.com/mcp"},
"bybit-trade": {"command": "npx", "args": ["-y", "bybit-official-trading-server"]}
}
}
Set BYBIT_TESTNET=true + API keys in env. Conditional orders (stop-loss, take-profit, OCO) are first-class — your agent can attach risk policy at order time.
Bitget — setup walkthrough
Bitget exposes a dedicated AI sub-account ("GetClaw") for agent execution:
{
"mcpServers": {
"algovault": {"url": "https://api.algovault.com/mcp"},
"bitget-trade": {"command": "npx", "args": ["-y", "bitget-mcp-server"]}
}
}
Set BITGET_DEMO=true in the wrapper (the MCP server has no built-in demo flag — the env var gates order placement at the client level). Fund the GetClaw account separately from your main account.
Gemini — setup walkthrough
Build Gemini's self-hosted MCP from source, alongside AlgoVault:
git clone https://github.com/gemini/developer-platform
cd developer-platform/packages/mcp-server
npm install
npm run build
Set GEMINI_API_BASE_URL=https://api.sandbox.gemini.com/v1 for zero real-money risk during development. Public market-data tools need no keys.
Kraken — setup walkthrough
Install the Kraken CLI (one binary), then serve it over MCP next to AlgoVault:
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/krakenfx/kraken-cli/releases/latest/download/kraken-cli-installer.sh | sh
kraken mcp -s all
The kraken paper engine needs no keys and no account. Run --validate before any live order; arm cancel-after as a dead-man's switch.
Alpaca — setup walkthrough
Run Alpaca's crypto MCP Server zero-install, scoped to crypto toolsets, alongside AlgoVault:
{
"mcpServers": {
"algovault": {"url": "https://api.algovault.com/mcp"},
"alpaca": {"command": "uvx", "args": ["alpaca-mcp-server"]}
}
}
Set ALPACA_TOOLSETS=trading,crypto-data to scope crypto-only; ALPACA_PAPER_TRADE defaults to true for zero real-money risk.
Hyperliquid — setup walkthrough
Hyperliquid signs orders with an EIP-712 wallet signature; the official Python SDK implements both signing schemes:
pip install hyperliquid-python-sdk
from hyperliquid.exchange import Exchange
from hyperliquid.utils import constants
exchange = Exchange(wallet, constants.TESTNET_API_URL, account_address=MASTER)
Note the testnet faucet requires a prior mainnet deposit from the same address, and US/Ontario are Restricted Persons under Hyperliquid's Terms §1.6.
Aster — setup walkthrough
Aster publishes nothing to npm or PyPI — the official connector installs from git:
pip install git+https://github.com/asterdex/aster-connector-python.git
# testnet base: https://fapi.asterdex-testnet.com
# EIP-712 chainId: 714 (testnet) / 1666 (mainnet)
The V3 nonce is in microseconds and must sit within ±10s of server time.
BingX — setup walkthrough
BingX publishes no official client SDK, so the demo is dependency-free:
# demo host (paper trading, no real funds)
https://open-api-vst.bingx.com
POST /openApi/swap/v2/trade/order/test # validates, places nothing
POST /openApi/swap/v2/trade/getVst # top up demo balance
Symbols on the VST host are normal (BTC-USDT), not -VST-suffixed.
KuCoin — setup walkthrough
KuCoin has no sandbox — it was delisted on 2023-07-10 and every sandbox host is NXDOMAIN. The demo uses the order-validation endpoint instead:
npm install kucoin-universal-sdk
POST https://api-futures.kucoin.com/api/v1/orders/test
# validates signature + params. Does NOT fill, no simulated balances.
Every legacy per-language KuCoin SDK is archived — and several archived repos carry more stars than the live one.
Gate.io — setup walkthrough
Gate moved its futures testnet — and gate-api 7.2.100 still ships the old host as its default, so set the base URL explicitly:
import gate_api
cfg = gate_api.Configuration(
host="https://api-testnet.gateapi.io/api/v4", # NOT the SDK default
)
size is a CONTRACT count, not a coin quantity — 0.001 BTC is 10 contracts at quanto_multiplier 0.0001. Direction is the sign of size.
Tutorials verified 2026-08-25 against: Binance Skills Hub · @okx_ai/okx-trade-mcp · bybit-official-trading-server · bitget-mcp-server. Snippets can drift — if one doesn't work, please refer to the upstream doc and report it at GitHub issues.
Try an exchange integration: algovault.com/integrations/binance
◆ Connect Your Trading Platform
Feed AlgoVault calls into hosted crypto-bot and copy-trade platforms — e.g. Cryptohopper's signaler marketplace, 3Commas, and other signal-bot platforms — via the Webhooks channel or the platform's signal import. Your bot trades on AlgoVault's directional calls without you writing glue code.
◆ Skills & Usage Examples
20 real-world workflows for AI agents and human developers. From simple one-liners to multi-agent orchestration.
Quick BTC Check
BeginnerThe simplest possible call. Ask your agent for a single trade call.
get_trade_callclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Portfolio Scanner
IntermediateLoop through the top 10 assets, get trade calls for each, and filter by high confidence.
get_trade_call × 10 | Pattern: batch calling, confidence filteringclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Regime-Aware Trading
IntermediateCheck the market regime first. Only request trade calls when the regime is favorable for directional trading.
get_market_regime → get_trade_call | Pattern: conditional chainingclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Funding Arb Monitor
IntermediateScan for cross-venue funding rate arbitrage opportunities. Alert when the annualized spread exceeds your threshold.
scan_funding_arb | Pattern: threshold-based alertingclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Full 3-Tool Pipeline
AdvancedThe complete AlgoVault workflow: regime detection, trade call, then arb check for the same asset. Maximum context for one decision.
get_market_regime → get_trade_call → scan_funding_arb | Pattern: full pipeline compositionclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Multi-Timeframe Confirmation
AdvancedGet trade calls on multiple timeframes for the same asset. Only act when all timeframes agree on direction.
get_trade_call × 3 | Pattern: multi-timeframe consensusclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
TradFi Rotation
AdvancedCompare regime and direction across TradFi perpetuals. Rotate into the asset with the strongest trend.
get_market_regime × 3 + get_trade_call × 3 | Pattern: cross-asset comparisonclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Risk-Gated Entry
AdvancedOnly enter trades when both confidence and regime alignment pass your risk filters. Skip everything else.
get_market_regime → get_trade_call | Pattern: dual risk filterclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Funding Sentiment Dashboard
AdvancedGet market regime for major assets and use the cross-venue funding sentiment to gauge overall market bias.
get_market_regime × 3 | Pattern: macro sentiment aggregationclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Contrarian Meme Scanner
AdvancedScan lower-tier assets for contrarian setups: high-confidence SELL calls during an uptrend may signal crowded longs about to unwind.
get_market_regime × 5 + get_trade_call (conditional) | Pattern: contrarian divergence detectionclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Divergence Detector
AdvancedCompare trade call direction vs market regime. When they disagree, flag it as a high-risk divergence.
get_market_regime + get_trade_call per asset | Pattern: signal-regime divergenceclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Hourly Digest Bot
AdvancedBuild an automated digest: scan all tier-1 and tier-2 assets every hour, summarize trade calls and market regime into a brief report.
get_trade_call × 8 + get_market_regime × 2 | Pattern: periodic digest, notification-readyclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Hedging Advisor
AdvancedYou hold a long ETH position. Check regime and trade call — if both turn bearish, look for a funding arb to hedge via the cheaper venue.
get_market_regime → get_trade_call → scan_funding_arb | Pattern: defensive hedgingclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Volatility Breakout Watch
AdvancedUse regime detection as a screener: find assets in VOLATILE regime with high confidence — these are breakout candidates. Then get trade call for direction.
get_market_regime × 6 + get_trade_call (conditional) | Pattern: regime as screenerclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Cross-Asset Correlation
AdvancedGet trade calls for BTC, ETH, SOL simultaneously. If all say SELL, it's a macro risk-off signal, not just one asset.
get_trade_call × 3 | Pattern: correlation / macro signalclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Funding Cash-and-Carry
AdvancedFind a funding arb spread, then get a trade call on the long side. If the trade call agrees with the long direction, you have double conviction.
scan_funding_arb → get_trade_call | Pattern: arb + directional alignmentclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Weekend vs Weekday Patterns
ResearchSchedule trade calls every 4 hours, log results over time. Compare weekend vs weekday regime patterns to find exploitable edges.
get_trade_call + get_market_regime (scheduled) | Pattern: data collection, researchclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Agent Portfolio Rebalance
AdvancedDaily regime check for each asset in your portfolio. Shift allocation toward TRENDING assets, reduce exposure to VOLATILE/RANGING positions.
get_market_regime × 5 | Pattern: regime-based portfolio allocationclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Smart DCA Bot
AdvancedDollar-cost averaging, enhanced: skip buys when the trade call says SELL with high confidence. Only DCA when direction is neutral or favorable.
get_trade_call | Pattern: strategy enhancement, DCA optimizationclaude plugin install AlgoVaultLabs/algovault-skills
View Skill →
Multi-Agent War Room
ExpertThree specialized agents, one coordinator. Agent A handles regime detection, Agent B runs trade calls, Agent C monitors funding arbs. The coordinator synthesizes all three into a single decision.
claude plugin install AlgoVaultLabs/algovault-skills
View Skill →
◆ Track Record
◆ Live Dashboard
Every recorded BUY/SELL call is scored by PFE (Peak Favorable Excursion) win rate and broken down by asset, timeframe, and regime — updated live from the same on-chain-anchored record. No cherry-picking: the full call set is public.
◆ Verify
Every call is hashed and anchored on Base L2 via daily Merkle batches. This makes the track record tamper-proof.
How It Works
Every BUY/SELL call is hashed using keccak256(coin, signal, confidence, timeframe, timestamp, price) at the moment it's generated
Hashes accumulate throughout the day
At 00:05 UTC, all new hashes are assembled into a Merkle tree
The Merkle root is published to the MerkleRootRegistry smart contract on Base L2
Anyone can verify that a specific call existed in a batch by checking its Merkle proof against the on-chain root
Verification Endpoints
GET /api/verify-signal?signalId=<ID>
Returns: call details, hash, Merkle proof, batch info, Basescan tx link, and a boolean verified field.
GET /api/merkle-batches
Returns: list of all published batches with root hashes, call counts, tx hashes, and Basescan links.
Visual Verification
Visit algovault.com/verify to look up any call and see its on-chain proof in a human-readable format.
Contract Details
| Address | 0x6485396ac981fe0a58540dfbf3e730f6f7bcbf81 |
| Chain | Base (chain ID 8453) |
| Explorer | View on Basescan → |
What This Proves
- ✓ Calls were recorded BEFORE outcomes were known
- ✓ No call can be retroactively edited or deleted
- ✓ The complete set of calls in each batch is locked — cherry-picking is detectable via sequential call IDs
◆ Pricing
Two payment rails: Stripe subscriptions for human developers, x402 micropayments (USDC on Base) for autonomous agents.
Subscription Tiers
| Free | Starter | Pro | Enterprise | |
|---|---|---|---|---|
| Price | $0 | $9.99/mo or $39.90/6mo | $49/mo or $129/6mo | Contact us |
| Monthly calls | 200 | 10,000 | 100,000 | Custom |
| Daily calls | 100 | 1,000 | 10,000 | Custom |
| Assets | All crypto + TradFi | All crypto + TradFi | All crypto + TradFi | All crypto + TradFi |
| Timeframes | All 11 | All 11 | All 11 | All 11 |
| Funding arb results | Top 5 | Unlimited | Unlimited | Unlimited |
Pro 6-month is currently $129 — limited-time pricing; subscribe now and renewals keep your price.
Quota is counted per call, regardless of verdict. The two meters are independent — a call is refused when either the monthly or the daily allowance is exhausted, and the daily one resets at 00:00 UTC.
What happens after you subscribe
- Click "Subscribe to [Plan]" — on /signup. We redirect you to Stripe Checkout (we never see your card).
- Pay on Stripe — Stripe sends you a receipt email. Behind the scenes, our webhook generates a unique API key for your subscription tier.
-
Land on the Welcome page
— Your API key is shown in green — copy it. We also email it to your billing address (check spam, sender:
[email protected]). -
Make your first call
—
curl -H "Authorization: Bearer av_live_…" https://api.algovault.com/mcp …or paste the key into your Claude Desktop / Cursor / Claude Code MCP config. Need to find your key later? Visit/account.
◆ FAQ
How often should I call get_trade_call?
Can I combine multiple tools in one workflow?
What's the latency per call?
get_trade_call and Hyperliquid for get_market_regime when you do not name one, or any other venue in that tool’s exchange parameter. Funding arb scans 7 venues: Hyperliquid, Binance, Bybit, Gate, KuCoin, Aster, and OKX. Response time depends on the exchange's API latency and the number of assets scanned.
How is trade call performance tracked?
performance://signal-performance MCP resource and on the live dashboard.
What assets are supported?
exchange parameter on each tool lists every venue it accepts. This includes standard crypto perps (BTC, ETH, SOL, etc.) and liquidity-filtered meme coins on every venue. TradFi perpetuals (TSLA, XAU, NVDA, SPX, MSTR, COIN, AAPL, and more) are available on multiple venues — asset availability varies per venue; pass exchange explicitly to target a specific venue. Low-liquidity meme coins are automatically gated to prevent unreliable trade calls.
Do you provide exit calls?
What is x402 and how do agent payments work?
How do I verify a call's integrity?
GET /api/verify-signal?signalId=<ID>.
Can I run AlgoVault locally?
npx -y crypto-quant-signal-mcp and it runs locally in stdio mode for Claude Desktop. For remote access, the hosted version at api.algovault.com/mcp supports Streamable HTTP transport.
Built by AlgoVault Labs