Skip to main content
Glama
joshavenue

Reservoir MCP

by joshavenue

Reservoir MCP

Let your AI agent work with Reservoir, Hydromancer's free archive of Hyperliquid history, the same way the Exploring Reservoir guide does: DuckDB reading Parquet files straight from S3.

"How much was traded on xyz:ANT in its first 24 hours, and how many longs got liquidated?" "Show me hourly BTC candles for October 1." "What did the xyz:TSLA order book look like at 14:30 UTC yesterday? What would a $100K sell have cost?" "Who held the biggest positions in xyz:MSFT on October 20, and where are their liquidation prices?" "Which HIP-3 markets had the most liquidations last week?"

Your agent picks the tool, checks how much it will download, runs the query and explains the answer.

  • Everything in Reservoir: fills (trades, liquidations, ADL, builder and TWAP fills), 1-second candles, daily position, spot-balance and account-value snapshots, and 1-minute order books, for Hyperliquid and every HIP-3 venue (including ones that have shut down)

  • Same layout as the guide: same bucket paths, same market names, same DuckDB SQL. Anything the guide does, reservoir_query can run

  • Watches your AWS bill: Reservoir is requester pays. Every tool estimates the download first, stops above a limit you control, and reports what each call downloaded

  • Knows where Reservoir stops: for today's data, intraday positions, individual orders, funding, open-interest history or very large per-wallet scans, results point to the Hydromancer API endpoint that answers it directly

  • Read-only: it reads the Reservoir bucket and its own local copies. It cannot write elsewhere, trade, sign or touch funds

1. Set up AWS (once)

Reservoir is free, but downloads are billed to your own AWS account (requester pays). The first 100 GB a month of AWS internet transfer is free, then about $0.114 per GB. A typical question downloads a few MB to a few hundred MB.

  1. Install the AWS CLI v2.

  2. Sign in: aws login (or use a named profile with a read-only IAM user; see the guide for the policy).

  3. Check it works:

aws s3 ls s3://hydromancer-reservoir/ --request-payer requester --region ap-northeast-1

You also need uv, which runs the server.

Related MCP server: Alpha Arena MCP

2. Add it to your AI app

Claude Code

claude mcp add reservoir -- uvx --from git+https://github.com/joshavenue/reservoir-mcp reservoir-mcp

Claude Desktop

Settings → Developer → Edit Config, then add:

{
  "mcpServers": {
    "reservoir": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/joshavenue/reservoir-mcp", "reservoir-mcp"]
    }
  }
}

Restart Claude Desktop. If it says uvx is not found, use the full path from which uvx (for example /Users/you/.local/bin/uvx).

Cursor

~/.cursor/mcp.json: use the same mcpServers block as Claude Desktop.

Codex

~/.codex/config.toml:

[mcp_servers.reservoir]
command = "uvx"
args = ["--from", "git+https://github.com/joshavenue/reservoir-mcp", "reservoir-mcp"]

VS Code (GitHub Copilot)

.vscode/mcp.json:

{
  "servers": {
    "reservoir": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/joshavenue/reservoir-mcp", "reservoir-mcp"]
    }
  }
}

Using a profile other than default? Add "env": { "AWS_PROFILE": "your-profile" }. You can also pass AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY (and AWS_SESSION_TOKEN) in env instead of signing in with the CLI.

Then ask: "Run reservoir_setup_check."

Tools

Tool

What it answers

reservoir_setup_check

Does my AWS access work? What is the newest day? How much have I downloaded this month?

reservoir_coverage

What datasets, venues and dates exist? Is something (say, funding) in Reservoir, or which API endpoint has it?

reservoir_list_files

Which files cover a date range, how big they are, and a ready read_parquet(...) snippet (like aws s3 ls)

reservoir_query

Any read-only DuckDB SQL over the bucket, written as in the guide. Estimates the download before running

reservoir_fills

Volume, taker buy/sell, net flow, long/short liquidations, VWAP for a market, a venue or a wallet; breakdowns by minute, hour, day, market or wallet; largest fills

reservoir_candles

OHLCV at 1s to 1d, built from Reservoir's 1-second candles

reservoir_orderbook

Spread, depth within N bps, slippage for an order size, and the full top-20 book at any minute

reservoir_positions

Every open position in a perp market from the daily snapshot: long vs short, leverage, largest positions, liquidation clusters

reservoir_wallet

A wallet's perp positions, spot balances and account values on a given day

reservoir_download

Save whole files locally (like aws s3 cp), then query them for free

The server also has a reservoir://guide resource and a reservoir_guide prompt that tell the agent which tool answers which question.

Market names

Same as in Reservoir itself:

  • Hyperliquid perps: BTC, ETH, kPEPE

  • HIP-3 perps: xyz:MSFT, xyz:ANT, para:BTCD, io:ANTH (case is fixed for you)

  • Spot: @107, PURR/USDC

  • HIP-4 outcomes: #114940

Venues: hyperliquid, xyz (Trade[XYZ]), flx (Felix), vntl (Ventuals), hyna (HyENA), km and mkts (Markets.xyz, which moved from km to mkts in mid-2026), cash (Dreamcash), para (Paragon), io (Entropy).

Times accept 2026-10-26, 2026-10-26T14:00:00Z, 7d, 24h or Unix milliseconds, all UTC. A date-only end includes that whole day.

What it costs

Every result includes aws_usage: megabytes downloaded in that call and your month-to-date total through this server.

  • Reservoir files are sorted by time, and the tools read only the columns and time slices they need. The first 24 hours of xyz:ANT (two days of xyz fills, about 620 MB of files) downloaded 74 MB.

  • Files are not split by market or wallet, so a single-wallet question still reads whole days. Those results suggest the matching Hydromancer API endpoint.

  • Each call stops if its estimate is above max_download_mb (1,024 MB unless you or your agent pass a different value; the highest allowed is set by RESERVOIR_HARD_MAX_DOWNLOAD_MB).

  • Small files (order books, liquidation files, venue snapshots, most candle files) are kept in ~/reservoir-data after the first read, so asking again costs nothing.

  • Running the server on an AWS machine in ap-northeast-1 (Tokyo) makes transfer free.

When Reservoir isn't the right source

Reservoir is a daily archive. It is added to once a day (yesterday's data lands around 10:00 to 12:00 UTC) and never includes today. When a request goes past what it holds, results include a hydromancer_api section naming the endpoint that answers it, with a link to its docs and an example request:

You asked for

Hydromancer API

Today, or anything live

candleSnapshot, fillsByTime, liquidationHistoryByTime, l2Book, WebSocket streams

Positions at any time of day

perpSnapshots, batchClearinghouseStates

Individual orders and who placed them

l4Book, l4BookUpdates

Funding, open interest over time, oracle and mark prices

fundingHistory, openInterestHistory, perpPriceHistoryByTime

One wallet over many days, PnL, deposits and withdrawals

userFillsByTime, userPnlSummary, userNonFundingLedgerUpdates

Slippage and depth over months, or orders bigger than 20 levels can fill

slippageHistory, marketLiquidityHistory

Get an API key. Early-stage teams and public goods may qualify for free access. Questions or data requests: data@hydromancer.xyz.

Settings

Variable

Default

What it does

AWS_PROFILE

default

AWS CLI profile to read credentials from

RESERVOIR_DATA_DIR

~/reservoir-data

Local copies of files, in the bucket's folder layout

RESERVOIR_DEFAULT_MAX_DOWNLOAD_MB

1024

Per-call download limit when a tool call doesn't set one

RESERVOIR_HARD_MAX_DOWNLOAD_MB

20480

Highest limit a tool call may ask for

RESERVOIR_CACHE_MAX_FILE_MB

32

Keep files up to this size locally after first use

RESERVOIR_QUERY_TIMEOUT_S

300

Stop a query after this many seconds

RESERVOIR_AWS_CLI

found on PATH

Full path to aws if your app can't find it

Safety

  • Read-only toward Hyperliquid: no trading, no signing, no private keys.

  • The DuckDB connection can read only s3://hydromancer-reservoir/ and the local data folder. Writing files, attaching databases, installing extensions and changing settings are blocked, and reservoir_query accepts a single SELECT.

  • Your AWS credentials stay on your machine. They are read from the AWS CLI or your environment and used only to sign requests to the Reservoir bucket.

Development

git clone https://github.com/joshavenue/reservoir-mcp && cd reservoir-mcp
uv sync
uv run pytest -q                     # offline unit tests
uv run python scripts/smoke.py       # end-to-end over stdio (needs AWS, a few MB)
uv run python scripts/live_check.py  # every tool against live data (needs AWS, a few hundred MB)

Data definitions follow Hydromancer's docs: fills have one row per account side, volume counts the taker side only, open interest from snapshots is two-sided. See the schema reference.

License

MIT

Available Tools

10 tools
reservoir_candlesCandles from 1-second dataA
Read-onlyIdempotent

OHLCV candles at any interval, rolled up from Reservoir's 1-second candles (up to 1,500 candles per call).

NameRequiredDescriptionDefault
endNoUTC. A date ("2026-10-26"), date-time ("2026-10-26T14:00:00Z"), relative ("7d", "24h") or Unix ms. A date-only end includes that whole day. Default: the newest day in Reservoir.
startNoUTC. A date ("2026-10-26"), date-time ("2026-10-26T14:00:00Z"), relative ("7d", "24h") or Unix ms. A date-only end includes that whole day. Default: the newest day in Reservoir.
marketYesMarket as Reservoir names it: "BTC" (Hyperliquid perp), "xyz:MSFT" (HIP-3 perp), "@107" or "PURR/USDC" (spot), "#114940" (HIP-4). Case is fixed automatically for perps.
intervalNoCandle size, built from Reservoir's 1-second candles.1h
max_download_mbNoStop if the estimated download is larger than this many MB (default 1024). Raise it only if the user accepts the AWS cost.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld safety, so the bar is lower, and the description still adds a real behavioral constraint: a hard cap of up to 1,500 candles per call, which tells the agent results may be truncated. It stops short of describing pagination/truncation mechanics or the interaction with the download-size guard.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the per-call cap placed where it will be seen first. Nothing wasted, nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema and rich parameter descriptions carry most of the load, and the source/cap is stated, but for a tool with a cost-related parameter and a 1,500-candle ceiling the description says nothing about truncation behavior, expected return shape, or when to widen the interval versus paginate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter including the interval enum and the max_download_mb cost warning is already fully documented in the schema. The description adds no syntax or format detail beyond what is structured, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific output (OHLCV candles) at any interval, derived from a specific source (Reservoir's 1-second candles). An agent can distinguish this from reservoir_query (raw data) or reservoir_download (files) without inspecting any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'rolled up from 1-second candles' — this is the aggregation tool — but the description never explicitly says when to prefer it over reservoir_query or how it interacts with reservoir_coverage. No exclusions or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reservoir_coverageWhat Reservoir coversA
Read-onlyIdempotent

Datasets, bucket paths, market naming, venues with their first and newest day, update schedule and AWS cost. With topic, says whether Reservoir holds it and, if not, which Hydromancer API endpoint does.

NameRequiredDescriptionDefault
topicNoWhat the user wants, e.g. "funding history" or "liquidations". Says whether Reservoir has it or which Hydromancer API endpoint does.
venueNoOnly this venue: hyperliquid, xyz, flx, vntl, hyna, km, mkts, cash, para, io.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, open-world behavior, so the safety bar is low. The description adds meaningful non-obvious content: it discloses the specific fields returned (venue first/newest day, update schedule, AWS cost) and the fallback behavior of pointing to an alternate API endpoint when a topic is absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with no filler, and the coverage scope is front-loaded before the topic-routing behavior. The noun-pile style is dense but readable and every clause conveys content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema defining return values and annotations covering safety and idempotency, the description only needed to convey scope and topic routing, which it does. It could be slightly stronger by noting the no-argument default (full catalog), but nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the venue enum list and a full explanation of `topic`, so the schema carries the parameter burden. The description restates the topic behavior without adding syntax, defaults, or format detail beyond the schema, making baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource it reports on (datasets, bucket paths, market naming, venue date ranges, update schedule, AWS cost), which clearly distinguishes it from sibling data-retrieval tools like reservoir_query or reservoir_candles. It is a telegraphic noun list rather than an explicit verb+object, but the intent (report Reservoir's coverage/catalog) is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the conditional behavior of the `topic` argument ('says whether Reservoir holds it and, if not, which Hydromancer API endpoint does'), which is a form of routing guidance. However, it never states when an agent should call this tool versus the sibling data tools (e.g., before querying, to discover venues), and gives no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reservoir_downloadDownload Reservoir filesA
Idempotent

Like aws s3 cp: save whole Parquet files to the local Reservoir folder (RESERVOIR_DATA_DIR, default ~/reservoir-data), keeping the bucket's folder layout. Files already there are skipped. Use for repeated analysis.

NameRequiredDescriptionDefault
endNoUTC. A date ("2026-10-26"), date-time ("2026-10-26T14:00:00Z"), relative ("7d", "24h") or Unix ms. A date-only end includes that whole day. Default: the newest day in Reservoir.
startNoUTC. A date ("2026-10-26"), date-time ("2026-10-26T14:00:00Z"), relative ("7d", "24h") or Unix ms. A date-only end includes that whole day. Default: the newest day in Reservoir.
venueNoVenue for by_dex datasets.
marketNoNeeded for order-book datasets.
datasetYesDataset key, as in reservoir_list_files.
max_download_mbNoStop if the estimated download is larger than this many MB (default 1024). Raise it only if the user accepts the AWS cost.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds the concrete mechanism: files land in a specific local folder, keep the bucket's layout, and existing files are skipped, which explains the idempotency rather than restating it. It does not mention network/credential requirements or what happens on partial failure, so it stops short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the analogy and the destination path, then idempotency, then the use case. Nothing is redundant and every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full parameter documentation, the description only needs to convey the side effects and the intent, which it does. The remaining gap is the absence of any explicit comparison to the sibling query tools for an agent deciding between downloading and querying in place.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so dataset, start/end, venue, market, and max_download_mb are all documented in the schema, including cost warnings and defaults. The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a concrete verb+resource ('save whole Parquet files') plus the exact destination (RESERVOIR_DATA_DIR, default ~/reservoir-data) and layout behavior (bucket folder structure preserved). The `aws s3 cp` analogy and 'whole Parquet files' phrasing implicitly separate it from query-style siblings like reservoir_query, but no sibling is named outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use for repeated analysis' is the only usage cue, and it implies when this beats querying remotely without stating the alternative or any exclusion. There is no guidance on when not to download (e.g., one-off lookups) or how it relates to reservoir_query / reservoir_orderbook.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reservoir_fillsFills, volume and liquidationsA
Read-onlyIdempotent

Trades for a market, a venue or a wallet over any past window: taker volume, buy/sell split, net flow, long/short liquidations, VWAP, high/low, wallets, plus optional breakdowns and raw fills.

NameRequiredDescriptionDefault
endNoUTC. A date ("2026-10-26"), date-time ("2026-10-26T14:00:00Z"), relative ("7d", "24h") or Unix ms. A date-only end includes that whole day. Default: the newest day in Reservoir.
kindNoWhich fill file to read. liquidations/adl/twap_fills/builder_fills are much smaller than all.all
rowsNoAlso return this many individual fills (0 = none).
startNoUTC. A date ("2026-10-26"), date-time ("2026-10-26T14:00:00Z"), relative ("7d", "24h") or Unix ms. A date-only end includes that whole day. Default: the newest day in Reservoir.
venueNoVenue when no market is given (default hyperliquid).
marketNoMarket as Reservoir names it: "BTC" (Hyperliquid perp), "xyz:MSFT" (HIP-3 perp), "@107" or "PURR/USDC" (spot), "#114940" (HIP-4). Case is fixed automatically for perps. Omit to cover a whole venue.
addressNoOnly this wallet (0x...). Reservoir files are per day, so this scans whole days.
min_usdNoWith rows: only fills of at least this USD value, largest first.
group_byNoAlso return a breakdown.none
with_tx_hashNoInclude tx_hash in rows (the largest column; costs more).
max_download_mbNoStop if the estimated download is larger than this many MB (default 1024). Raise it only if the user accepts the AWS cost.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so safety is covered. The description adds little behavioral context of its own — the cost warnings, day-level scanning, and small-file hints all live in the schema, not the description. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that leads with scope and then lists outputs; no filler. The metrics list is dense but each clause carries information an agent needs to know the tool exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and 100% schema description coverage, the description only needs to convey the analytical surface, which it does by naming the aggregates and optional breakdowns/raw fills. What's missing is guidance on volume/time-range cost tradeoffs, which is relevant given a per-day file scan of possibly large downloads.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 11 parameters is already documented with format, defaults and constraints (relative dates, max_download_mb cost guard, group_by enums). The description adds no parameter-level meaning beyond the schema, which is the expected baseline at full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a concrete resource (fills/trades) and enumerates the aggregates it returns: taker volume, buy/sell split, net flow, liquidations, VWAP, high/low, wallets, raw fills. Scope is stated as market/venue/wallet over any past window. It does not distinguish itself from siblings such as reservoir_query or reservoir_candles, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied — an agent can infer this is the fills/volume aggregation tool, but the description never says when to prefer it over reservoir_query, reservoir_candles, or reservoir_download, nor any exclusions or prerequisites. No explicit when/when-not guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reservoir_list_filesList Reservoir filesA
Read-onlyIdempotent

Like aws s3 ls: the exact Parquet files for a dataset and date range, their sizes, the full-download cost and a ready read_parquet(...) snippet for reservoir_query. Lists only; downloads nothing.

NameRequiredDescriptionDefault
endNoUTC. A date ("2026-10-26"), date-time ("2026-10-26T14:00:00Z"), relative ("7d", "24h") or Unix ms. A date-only end includes that whole day. Default: the newest day in Reservoir.
startNoUTC. A date ("2026-10-26"), date-time ("2026-10-26T14:00:00Z"), relative ("7d", "24h") or Unix ms. A date-only end includes that whole day. Default: the newest day in Reservoir.
venueNoVenue for by_dex datasets (default hyperliquid, or the market's venue).
marketNoNeeded for order-book datasets; sets the venue for others.
datasetYesDataset key from reservoir_coverage, e.g. fills, liquidations, candles, perp_snapshots, orderbook, spot_fills, outcome_fills, account_values.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare read-only, idempotent, open-world behavior, but the description adds concrete context: the tool returns file listings with sizes and download cost and performs no download. It does not mention auth or rate limits, which is a minor gap for a read-only listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with a useful analogy and immediately scoped by dataset/date range. Every phrase adds information, and the non-download behavior is stated without clutter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the annotations cover safety semantics, while the input schema fully documents all parameters. The description supplies enough context for an agent to understand the tool's role and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including detailed start/end formats and venue/market meanings. The description only maps loosely to dataset and date range and adds no parameter syntax or constraints beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: it lists exact Parquet files for a dataset and date range, with sizes, cost, and a query snippet. The phrase 'Lists only; downloads nothing' clearly distinguishes it from download/query siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It establishes a clear use case via the `aws s3 ls` analogy and points to `reservoir_query` as the consumer of the returned snippet. 'Lists only; downloads nothing' rules out download behavior, but it does not explicitly name `reservoir_download` or other siblings as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reservoir_orderbookOrder book: spread, depth, slippageA
Read-onlyIdempotent

Minute-by-minute top-20 L2 books: mid, spread, USD depth within N bps, optional slippage for an order size, medians over the window, and the full book at a given minute (max 31 days).

NameRequiredDescriptionDefault
atNoReturn the full top-20 book nearest this time instead of a window.
endNoUTC. A date ("2026-10-26"), date-time ("2026-10-26T14:00:00Z"), relative ("7d", "24h") or Unix ms. A date-only end includes that whole day. Default: the newest day in Reservoir.
everyNoSampling of the returned series.1h
startNoUTC. A date ("2026-10-26"), date-time ("2026-10-26T14:00:00Z"), relative ("7d", "24h") or Unix ms. A date-only end includes that whole day. Default: the newest day in Reservoir.
marketYesMarket as Reservoir names it: "BTC" (Hyperliquid perp), "xyz:MSFT" (HIP-3 perp), "@107" or "PURR/USDC" (spot), "#114940" (HIP-4). Case is fixed automatically for perps.
depth_bpsNoDepth bands in bps from mid (default [10, 50, 100]).
notional_usdNoAlso compute buy and sell slippage for a market order of this size.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, openWorld), and the description adds real behavioral context on top: top-20 depth cap, a 31-day maximum window, and that windowed results are medians rather than raw samples. It omits rate limits, pagination, and empty-result behavior, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the resource and enumerates outputs in the order an agent would care about them. No filler, though the run-on enumeration takes a second pass to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and the 100%-covered input schema handles parameter detail. The description supplies the key constraints (top-20, 31-day cap, median aggregation) an agent needs before calling; only sibling differentiation is left thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters including formats for start/end and the enum for every. The description adds only marginal meaning, mainly that 'N bps' maps to depth bands and 'order size' to notional_usd, plus the medians-over-window aggregation semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource and payload precisely: top-20 L2 books with mid, spread, USD depth by bps, slippage, window medians, and full-book snapshots. That is enough for an agent to tell it apart from reservoir_candles or reservoir_fills, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the 'medians over the window' vs 'full book at a given minute' phrasing hints at two modes of call, and '(max 31 days)' bounds the window. There is no explicit when-to-use, when-not-to-use, or routing to alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reservoir_positionsWho holds a perp marketA
Read-onlyIdempotent

Every open position in a perp market from the daily snapshot: long vs short accounts and notional, average entry, leverage, largest positions with liquidation prices, and where liquidations cluster.

NameRequiredDescriptionDefault
topNoHow many of the largest positions to list.
dateNoSnapshot day (UTC date). Default: newest snapshot.
marketYesMarket as Reservoir names it: "BTC" (Hyperliquid perp), "xyz:MSFT" (HIP-3 perp), "@107" or "PURR/USDC" (spot), "#114940" (HIP-4). Case is fixed automatically for perps.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description usefully adds the key temporal behavior: data comes from the daily snapshot rather than live state, which is important context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is a single front-loaded sentence that scopes the tool before enumerating the data it returns. It is dense but not padded, though part of the return-value enumeration is partly redundant given the presence of an output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, annotated tool with a full input schema and output schema, the description is largely sufficient for invocation. However, it says 'perp market' while the market parameter schema explicitly includes spot markets, creating a scope mismatch that could cause the agent to skip valid use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents market, date, and top semantics. The description does not add parameter-level detail beyond indirectly implying snapshot date and largest-position limiting, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and scope: open positions in a market from the daily snapshot, with long/short aggregates, entries, leverage, largest positions, and liquidation clusters. This clearly separates it from siblings like reservoir_orderbook, reservoir_fills, and reservoir_candles, though it uses no explicit verb like 'list' or 'get'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource: use this for position/holder data from a daily snapshot. However, it offers no explicit when-to-use or when-not-to-use guidance and does not route the agent to alternatives such as reservoir_query for custom analysis or reservoir_orderbook for live book data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reservoir_queryRun SQL on ReservoirA
Read-onlyIdempotent

Run DuckDB SQL directly on the Reservoir bucket, exactly like the exploring-reservoir blog. Before running, estimates the download from the columns the query reads and refuses above max_download_mb. Only the Reservoir bucket and local Reservoir copies can be read. Prefer the dedicated tools for fills, candles, books and positions.

NameRequiredDescriptionDefault
sqlYesOne read-only DuckDB SELECT over s3://hydromancer-reservoir/... paths, written as in the blog, e.g. SELECT ... FROM read_parquet('s3://hydromancer-reservoir/by_dex/xyz/fills/perp/all/date=2026-10-26/fills.parquet') WHERE coin = 'xyz:MSFT'.
dry_runNoOnly estimate the download; do not run.
max_rowsNoRows to return (default 200).
max_download_mbNoStop if the estimated download is larger than this many MB (default 1024). Raise it only if the user accepts the AWS cost.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint, idempotentHint, openWorldHint), and the description adds non-obvious behavior the annotations cannot express: an automatic download-size estimate derived from the columns read, a hard refusal above max_download_mb, and a read restriction to the Reservoir bucket and local copies. These are the failure modes an agent needs to anticipate before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with the core action, guardrail and alternative routing front-loaded in that order. The reference to "exactly like the exploring-reservoir blog" is a mild external pointer that costs a clause without full standalone value, but nothing else is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists and annotations declare the safety profile, the description supplies everything else an agent needs: access scope, cost guardrail, alternatives, and the read-only SELECT constraint (reinforced in the schema). Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description meaningfully explains max_download_mb's mechanism (estimate based on columns read, refusal above threshold) rather than just restating it. The sql parameter's syntax and path conventions are left entirely to the schema, so it does not fully supersede the structured data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Run DuckDB SQL directly on the Reservoir bucket") plus the exact access scope, and explicitly bounds itself against sibling tools for fills, candles, books and positions. An agent can classify this as the escape-hatch SQL tool without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (ad-hoc DuckDB SELECTs over the bucket), explicit when-not (“Prefer the dedicated tools for fills, candles, books and positions”), and the named domains map cleanly onto reservoir_fills, reservoir_candles, reservoir_orderbook and reservoir_positions. It also flags the cost precondition for raising the download ceiling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reservoir_setup_checkCheck Reservoir accessA
Read-onlyIdempotent

Check AWS sign-in, requester-pays access to the Reservoir bucket, DuckDB, the local data folder and this month's download total. Run this first, or whenever a tool reports a credentials error.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds useful context beyond that by listing the specific environmental checks performed, which tells the agent what this diagnostic verifies without redundant safety restatement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the first enumerates the checks, the second front-loads the usage trigger. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists to describe return values, and annotations cover safety and idempotency. The description supplies the remaining context an agent needs: what is checked and when to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing for the description to clarify; the schema is trivially complete. Baseline 4 applies, with no evidence of missing parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource ('Check Reservoir access') and then enumerates exactly what is checked: AWS sign-in, requester-pays bucket access, DuckDB, local data folder, and monthly download total. This makes it immediately distinguishable from the data-fetching sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger condition: 'Run this first, or whenever a tool reports a credentials error.' That is strong when-to-use guidance, though it does not name specific sibling alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reservoir_walletOne wallet's daily snapshotA
Read-onlyIdempotent

A wallet's perp positions, spot balances and account values on a given day, from the global snapshots. These files are not split by wallet, so each part scans the whole day's file.

NameRequiredDescriptionDefault
dateNoSnapshot day (UTC date). Default: newest snapshot.
addressYesWallet address, 0x followed by 40 hex characters.
includeNoParts to read (default all three).
max_download_mbNoStop if the estimated download is larger than this many MB (default 1024). Raise it only if the user accepts the AWS cost.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered. The description adds a genuinely useful non-obvious trait: the underlying files are not partitioned by wallet, so each requested part scans the full day's file — a real cost/latency signal that pairs with the schema's max_download_mb guard.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the concrete payload and followed by the operational caveat; nothing is wasted. The second sentence is terse to the point of slight ambiguity about what 'these files' refers to, keeping it just short of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and 100% param coverage, the description need only frame scope and cost, which it does. The main remaining gap is routing guidance against reservoir_positions/reservoir_query, which an agent would need to choose this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains date defaulting, address format, the include enum, and the download cap; baseline 3 applies. The description only indirectly motivates 'include' via the whole-file scan note and adds no format or default detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the specific resource (perp positions, spot balances, account values for one wallet on one day) and the source (global snapshots), which is concrete enough to distinguish it from a generic query tool. It does not explicitly name reservoir_positions or reservoir_query as the alternative, so sibling differentiation is only implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'one wallet's daily snapshot' versus the whole-day global files, but there is no explicit when-to-use statement, no exclusion of reservoir_positions or reservoir_query, and no prerequisites (e.g. needing reservoir_setup_check first). The agent must infer selection from the name and the one-line scan caveat.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv0.1.0
    • First observedreservoir_candles
    • First observedreservoir_coverage
    • First observedreservoir_download
    • First observedreservoir_fills
    • First observedreservoir_list_files
    • First observedreservoir_orderbook
    • First observedreservoir_positions
    • First observedreservoir_query
    • First observedreservoir_setup_check
    • First observedreservoir_wallet

TDQS

A4/5.0

Scored across 10 tools

Disambiguation4/5

Most tools target clearly distinct resources or actions: setup, coverage, file listing, specialized market-data queries, and file downloads. The broad reservoir_query overlaps with the specialized fills/candles/orderbook/positions tools, but its description explicitly says to prefer the dedicated tools, reducing misselection risk.

Naming Consistency4/5

All tools use the consistent reservoir_ prefix and snake_case, which makes them easy to scan and group. The set mixes action-like names (list_files, setup_check, download) with resource-like names (fills, candles, orderbook), so it is not a perfect verb_noun convention, but it remains predictable.

Tool Count5/5

Ten tools is well-scoped for a specialized market-data access server. Each tool has a clear role: setup, discovery, listing, querying, specialized data views, and downloading.

Completeness5/5

The surface covers the full read-only lifecycle for this domain: credential/setup checking, dataset discovery, file listing, SQL access, common analytical queries, and local downloads. The generic reservoir_query provides an escape hatch for any dataset not covered by the specialized tools, so there are no obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Provides comprehensive crypto intelligence for the Hyperliquid exchange, allowing users to query trader profiles, behavioral cohorts, and live market data. It enables AI agents to analyze over 1.8 billion trades, track whale positions, and access real-time liquidation heatmaps.
    106
    77 npm
    10
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to interact with Hyperliquid perpetual futures exchange for market analysis, account management, and risk-managed trading.
    5
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to query Hyperliquid spot market data, including token listings, live prices, 24h volumes, and wallet balances, via pay-per-call x402 micropayments.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Provides AI agents read-only, keyless access to Hyperliquid market data, funding rates, account risk, and HyperEVM token transfers through MCP tools, with caching and rate limiting to protect upstream APIs.
    12
    1
    MIT