market-pulse-mcp
market-pulse-mcp
小規模で特化したMCP(Model Context Protocol)サーバーです。LLMに暗号資産のライブ市場データを提供します:スポット価格、OHLCVローソク足、オーダーブックのスナップショット、無制限の非粒度(パーペチュアル)契約のファンディングレート、そして一本のテクニカル指標をゼロから計算します。すべてのデータソースが公開済みのキー不要な取引所APIであるため、設定するべきものや作成するアカウントは何もありません。
制作者は Brandon Perez(@remybanks77)で、クリーンなMCPサーバー実装を示すポートフォリオ作品です。型付きPython、最小限の依存関係、そしてpandasやta-libに頼らず自前で書いたインジケータ計算が特徴です。
機能
market-pulse-mcpは、MCP の stdio トランスポート上で6つのツールを公開します:
ツール | 説明 | データソース |
| 現在のスポット価格、最良ビッド/アスク、24時間出来高 | Coinbase Exchange |
| OHLCVローソク足 | Coinbase Exchange |
| トップ・オブ・ブックのスナップショット、スプレッド、ビッド/アスクのインバランス | Coinbase Exchange |
| パーペチュアルのファンディングレート、マーク価格、興味オープン(OI) | Hyperliquid |
| RSI(14)、EMA(20/50)、ATR(14)、実現ボラティティ | Coinbase Exchange(オン・デマンドで計算) |
| 上記を総合したコンパクトなマルチアセットテーブル | Coinbase Exchange + Hyperliquid |
シンボルは通常の基本(ベース)ティッカーです:"BTC"、"ETH"、"SOL"。末尾の -USD や /USD は許容して削除されるので、"BTC-USD" は "BTC" と同等です。
Related MCP server: MCP Crypto Market Data Server
インストール
uvを使う(推奨)
git clone https://github.com/remybanks77/market-pulse-mcp.git
cd market-pulse-mcp
uv venv
uv pip install -e ".[dev]"pipを使う
git clone https://github.com/remybanks77/market-pulse-mcp.git
cd market-pulse-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"どちらの方法でも market-pulse-mcp コンソールスクリプトがインストールされ、stdio上でサーバーを実行します。
Claude Code での設定
プロジェクトの .mcp.json に追加します(または claude mcp add を実行します):
{
"mcpServers": {
"market-pulse": {
"command": "market-pulse-mcp",
"args": []
}
}
}アクティブな virtualenvにインストールしていない場合は、command をそのvenvのバイナリを直接指すように設定してください。例:/path/to/market-pulse-mcp/.venv/bin/market-pulse-mcp
Claude Desktop での設定
claude_desktop_config.json に追加します(macOS:~/Library/Application Support/Claude/claude_desktop_config.json、Windows:%APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"market-pulse": {
"command": "/absolute/path/to/market-pulse-mcp/.venv/bin/market-pulse-mcp"
}
}
}保存後、Claude Desktopを再起動します。market-pulse サーバーが、ハンマー/ツールアイコンの下に6つのツールとともに表示されるはずです。
省略
User: What's BTC doing right now, and is it overbought?
Claude: [calls get_price("BTC")]
[calls compute_indicators("BTC", granularity="1h", limit=200)]
BTC is at $109,842 (bid $109,838 / ask $109,846). On the 1h chart:
- RSI(14): 68.4, approaching overbought but not there yet (>70)
- EMA(20) $109,510 above EMA(50) $108,220: short-term trend is bullish
- ATR(14): $412, so a typical 1h range is roughly 0.4% of price
- Realized vol (annualized): 47.9%
Not screaming overbought, but RSI is climbing. Want me to check the order
book for signs of resistance near current price, or pull funding rates to
see how leveraged longs are positioned?
User: Check funding, and give me a quick scan of BTC, ETH, and SOL.
Claude: [calls get_funding_rate("BTC")]
[calls market_summary(["BTC", "ETH", "SOL"])]
Funding on BTC perps (Hyperliquid): 0.0057% per 8h (about 6.2% annualized).
Mildly long-skewed, nothing extreme.
Quick scan:
BTC $109,842 RSI 68.4 bullish funding +6.2%/yr
ETH $3,912 RSI 61.2 bullish funding +4.8%/yr
SOL $198.30 RSI 54.9 flat funding +2.1%/yr
All three trending up on the hourly with positive funding. Nothing at a
extreme RSI level right now.設計メモ
pandasやta-libでなく、手書きのインジケータ計算を使う理由 このサーバーの主目的は、監査が容易い小さな依存関係であることです:mcp と httpx の2つだけ。4つのインジケータ式のためにpandasを引き込むのは、サーバー本体のロジックよりもはるかに重い依存関係になるでしょう。market_pulse_mcp/indicators.py は、SMA、EMA、ワイルダーのRSI、ワイルダーのATR、そしてログリターンから年率換算した実現ボラティティを、プレーンなPythonリスト上で直接実装しています。また各計メートルを手計算で確認したフィクスチャ値に対するユニットテストで検証しているので、動作の周辺だけでなく計算自体が保証されています。
なぜCoinbaseとHyperliquidなのか どちらもAPIキーなしで完全な市場データを公開しています。Coinbase Exchangeの公開RESTエンドポイント(api.exchange.coinbase.com)はティッカー、ローカス足、オーダーブックを対象とし、Hyperliquidの公開情報API(api.hyperliquid.xyz/info)は1つのmetaAndAssetCtxsリクエストで無制限有訴の契約のファンディングレートとマーク価格の任意性(...)を取得できます。これにより、このプロジェクトは完全に設定ゼロのままです:クローンして、インストールして、実行するだけ。Copyrightサインアップなどはありません。
レート制限への対応: Coinbaseのパブリックティアはレート制限が厳しく(1秒あたり数リクエスト)、exchanges.pyはすべてのリクエストを、指数バックオフ付きの小さなリトライループで包み、HTTP 429と5xxエラーにはリトライします(最大3回の試行、毎回バックオフを2倍にする)が、他の4xxは一時的な状態ではなく時にリクエストが不正であることを示すため即座に終了します。market_summaryはこのリクエストをシンボルごとに順番に呼び出しながらカバレージします。つまり並列ではなく直進するため速度は落ちますが、複数シンボルのスキャンをパブリックのレート制限の十分下に保てます。
エラーハインの哲学 各ツールは取引所クライアントとインジケータ計算からの例外をキャッチし、トレースバックをMCPトランスポートに伝播させずに {"error": "..."} を返します。これにより呼び出し側のモデルは、不透明なツールエラーではなく、処理可能で意味を把握できるメッセージ(再試行や別シンボルのユーザーへの提案など)を受け取れます。
テスト
pytest # offline tests only (default; see pyproject.toml)
pytest -m integration # also hit live Coinbase / Hyperliquid APIsオフラインスイート(tests/test_indicators.py と tests/test_exchanges.py)は完全な決定論です:インジケータ値は手動で計算したフィクスチャに対して検証し(各テストのコメント参照)、取引所のユーティリティ関数(シンボルの正規化、粒度の解決)はネットワークアクセスのない純粋関数です。統合スイート(tests/test_integration.py)は @pytest.mark.integration がマークされ、実データの価格と外部サービス依存のため既定ではスキップされます。クライアントコードが実際のAPI図形に一致しているかを確認したい場合は、明示的に実行してください。
プロジェクト構造
market_pulse_mcp/
server.py # MCPServer-based server: tool definitions, stdio entry point
exchanges.py # Coinbase + Hyperliquid HTTP clients, symbol/granularity helpers
indicators.py # RSI, EMA, ATR, realized volatility (stdlib only)
tests/
test_indicators.py # offline, fixture-based
test_exchanges.py # offline, pure-function tests
test_integration.py # live API tests, opt-in via -m integrationライセンス
MITです。詳細は LICENSE を参照してください。
Available Tools
8 toolsmarket_pulse_basisARead-onlyIdempotent
Compare Coinbase spot against the Hyperliquid perpetual for each asset: spot-perp basis in basis points, the current funding rate, and what the two together say about positioning.
Positive basis means the perp trades above spot (contango), which usually pairs with positive funding and crowded long positioning; negative basis (backwardation) with negative funding points the other way. Basis and funding disagreeing is the interesting case, so both are always reported rather than collapsed into one score.
Args: symbols: List of base tickers, e.g. ["BTC", "ETH", "SOL"]. Each must be listed on Coinbase spot and as a Hyperliquid perp; assets missing from either venue come back with an error on that row.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds meaningful runtime behavior: assets missing from either venue yield an error on that row, and basis and funding are always reported together rather than folded into one score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core comparison, followed by a short interpretive guide and a compact parameter block. Every sentence contributes; none repeats schema or annotation data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with rich annotations and an output schema, the description covers semantics, constraints, error behavior, and interpretation. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, symbols, has no schema description, but the Args block fully compensates by defining base tickers, giving an example, and stating both-venue listing and per-row error behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resources: compare Coinbase spot against Hyperliquid perp basis, plus funding and positioning. It is unambiguous and clearly distinct from price/candles/orderbook tools, but it never names or contrasts the nearest sibling market_pulse_funding_rate, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys the intended use case: agents needing spot-perp basis, funding, and the joint positioning read, with the 'disagreeing is interesting' line highlighting when the combined view matters. It gives input eligibility constraints but no explicit when-not-to-use or alternative tool routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_pulse_candlesARead-onlyIdempotent
Get OHLCV candles for a crypto asset from Coinbase.
Args: symbol: Base ticker, e.g. "BTC", "ETH", "SOL". granularity: One of "1m", "5m", "15m", "1h", "6h", "1d". limit: Number of candles to return (max 300).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| symbol | Yes | ||
| granularity | No | 1h |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, and the description is consistent with these. The description adds the Coinbase source, granularity options, and max limit, but does not disclose ordering, pagination, latency, or other runtime behavior 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-line summary and followed by a tightly structured Args list. Every sentence adds useful information and there is no filler or repetition of schema defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only candle fetch, the description covers the key parameters and the output schema supplies return-structure information. It would be slightly more complete with a note on candle ordering or time range behavior, but nothing essential is missing for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the Args section in the description carries the full burden. It gives meaningful semantics for all three parameters: example symbols, valid granularity values, and the max candle limit. This fully compensates for the otherwise bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a clear verb and resource: 'Get OHLCV candles for a crypto asset from Coinbase.' It is specific enough to distinguish from price or orderbook tools, though it does not explicitly name or differentiate a sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus siblings like market_pulse_price, market_pulse_indicators, or market_pulse_summary. The intended use is only implied by the word 'candles', leaving the agent to infer the right context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_pulse_funding_rateARead-onlyIdempotent
Get the current perpetual futures funding rate for a crypto asset from Hyperliquid, along with mark price and open interest.
Args: symbol: Base ticker, e.g. "BTC", "ETH", "SOL".
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds that the tool returns funding rate plus mark price and open interest from Hyperliquid, but does not disclose rate limits, freshness, or units; this is acceptable given the strong annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the purpose and followed by an Args section. There is no filler, repetition, or wasted detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one required parameter, a read-only annotation set, and an existing output schema, the description is nearly complete: it states the input format and the returned data categories. It omits minor details such as supported asset discovery or funding-rate period, but these do not block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It defines symbol as a base ticker and gives concrete uppercase examples (BTC, ETH, SOL), fully compensating for the empty schema and telling the agent exactly how to populate the required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb and resource: it gets the current perpetual futures funding rate from Hyperliquid, and explicitly names the additional returned data (mark price, open interest). This clearly distinguishes it from sibling tools such as price, candles, and orderbook.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or alternative routing, but the usage is implied: call this tool when you need current funding-rate data. It does not mention alternatives like market_pulse_basis or market_pulse_supported_assets, so the guidance is only implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_pulse_indicatorsARead-onlyIdempotent
Compute technical indicators (RSI-14, EMA-20/50, ATR-14, annualized realized volatility) for a crypto asset from recent Coinbase candles. All math is implemented from scratch on the standard library; see market_pulse_mcp/indicators.py.
Args: symbol: Base ticker, e.g. "BTC", "ETH", "SOL". granularity: Candle granularity: one of "1m", "5m", "15m", "1h", "6h", "1d". Determines both the indicator timeframe and the annualization factor used for realized volatility. limit: Number of candles to pull (more history gives a more stable EMA-50; at least 15 candles are required for RSI-14/ATR-14).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| symbol | Yes | ||
| granularity | No | 1h |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations, such as granularity determining the annualization factor, limit affecting EMA-50 stability, and the minimum 15 candles for RSI-14/ATR-14. This goes beyond a simple 'compute' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a clear summary followed by an Args section. It is slightly padded by the implementation note ('All math is implemented from scratch... see file'), which is not directly useful for tool selection or invocation, but the overall length is appropriate for three parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description correctly focuses on input semantics and behavior. It covers the data source (Coinbase candles), indicator timeframes, annualization, and parameter effects, providing everything an agent needs to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully documents all three parameters: symbol with examples, granularity with allowed values and its effect on annualization, and limit with stability and minimum requirements. This completely compensates for the schema's missing descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Compute') and names the exact technical indicators (RSI-14, EMA-20/50, ATR-14, annualized realized volatility) and the asset class (crypto asset). This clearly distinguishes it from siblings like market_pulse_price or market_pulse_candles, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context: this tool computes technical indicators from recent Coinbase candles, so an agent can infer when to use it (needing derived indicators). It does not explicitly name alternatives or exclusions, but the sibling names plus this context make the selection straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_pulse_orderbookARead-onlyIdempotent
Get an order book snapshot for a crypto asset from Coinbase: best bid
and ask, spread in basis points, and a bid/ask volume imbalance metric
computed over the top depth levels.
Args:
symbol: Base ticker, e.g. "BTC", "ETH", "SOL".
depth: Number of price levels per side to aggregate over (max 50).
include_levels: Return the raw price/size ladder as well. Off by
default because the ladder is depth pairs per side and the
summary fields above answer most questions; turn it on only to
walk the book or size an order against real resting liquidity.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| symbol | Yes | ||
| include_levels | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description does not contradict them. The description adds value beyond annotations by disclosing the data source (Coinbase), the per-side depth cap (max 50), and the size cost of include_levels ('the ladder is `depth` pairs per side'), so the agent understands the verbosity trade-off of the heavy option.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with a dense, informative summary sentence followed by a clean Args block. The include_levels rationale is the longest part but earns its place by preventing an unnecessary heavy call, and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter read-only tool with an output schema and full annotation coverage, nothing needed to select and invoke it correctly is missing: source, return fields, parameter semantics, defaults, and the cost trade-off of the optional ladder are all covered. The only minor blemish is the schema title reading 'get_orderbookArguments' instead of matching the tool name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates: symbol is clarified as the base ticker with examples ('BTC', 'ETH', 'SOL'), depth is defined as levels 'per side' with a max of 50, and include_levels explains its default-false behavior and the ladder cost. Every parameter gains meaning beyond the bare schema property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource — 'Get an order book snapshot for a crypto asset from Coinbase' — and enumerates the exact return fields (best bid/ask, spread in basis points, bid/ask volume imbalance over depth levels). This makes it easy to distinguish from siblings like market_pulse_price or market_pulse_summary, which cover single quotes and aggregate views rather than ladder depth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on what the tool returns and says the summary fields 'answer most questions', with include_levels to be enabled 'only to walk the book or size an order against real resting liquidity'. It provides clear context without explicit exclusions, but it never names an alternative sibling or states exactly when to pick this over market_pulse_price or market_pulse_summary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_pulse_priceARead-onlyIdempotent
Get the current spot price for a crypto asset from Coinbase.
Args: symbol: Base ticker, e.g. "BTC", "ETH", "SOL". A trailing "-USD" or "/USD" is tolerated and stripped.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is handled. The description adds useful behavioral context beyond that: the data source is Coinbase, and symbol normalization behavior is disclosed ('A trailing -USD or /USD is tolerated and stripped'). This is valuable operating detail without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely compact: one sentence for the tool purpose and a short Args block for the parameter. No repeated schema information, no filler, and the most important semantic detail is front-loaded. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only spot price lookup, the description is complete. Annotations carry the read-only/idempotence guarantees, the output schema handles return-value documentation, and the description covers source, price type, and symbol formatting. The sibling `market_pulse_supported_assets` even covers the complementary concern of which symbols are valid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the full explanatory burden for the single parameter. It does this well by defining `symbol` as a base ticker, providing concrete examples ('BTC', 'ETH', 'SOL'), and documenting accepted suffix forms. An agent can confidently construct valid inputs from this description alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get the current spot price for a crypto asset from Coinbase.' The word 'spot' plus 'current' clearly distinguishes it from sibling tools like market_pulse_candles or market_pulse_orderbook. It is immediately obvious what the tool does and where it fits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context for when to use it: whenever the agent needs the current spot price. It does not explicitly name alternatives or when-not-to-use cases, but the phrase 'current spot price' implicitly excludes historical candles, order books, funding rates, and derived indicators. A short explicit pointer to a sibling for historical data would make this a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_pulse_summaryARead-onlyIdempotent
Compact multi-asset summary table combining price, spread, funding rate, and RSI/trend for each symbol in one call. Useful for a quick market scan without calling the individual tools per asset.
Args: symbols: List of base tickers, e.g. ["BTC", "ETH", "SOL"].
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already cover safety (readOnly, idempotent, non-destructive). The description adds useful behavioral context by explaining that the tool returns one aggregated table containing specific metrics for all requested symbols, which goes beyond what the annotations state. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: one sentence for purpose and use case, followed by a concise Args block. There is no filler or redundant restatement of the schema, and the key aggregation behavior is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only summary tool with one parameter, an output schema, and sibling tools, the description covers why to call it, what it returns, and how to specify symbols. Minor gaps such as exact ticker formatting rules or behavior for unsupported symbols are non-critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no property descriptions, so the 'Args: symbols' documentation carries the burden. It clarifies that symbols are base tickers and provides a concrete list example. It could be more specific about accepted formats or unsupported symbols, but it is sufficient for a single array parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: a compact multi-asset summary table combining price, spread, funding rate, and RSI/trend for each symbol. This clearly differentiates it from the individual market_pulse_* siblings such as price, orderbook, funding_rate, and indicators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear use context: a quick market scan, avoiding calls to individual per-asset tools. It does not explicitly enumerate when NOT to use it or name an alternative tool, but the 'without calling individual tools' phrasing establishes the main routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_pulse_supported_assetsARead-onlyIdempotent
List which crypto assets this server can actually answer for, and on which venue. Call this before a scan rather than discovering coverage by watching individual symbols fail.
Coverage is not uniform. Coinbase quotes the spot side and Hyperliquid the perp side, and the two venues list different assets: some are spot-only (price, candles, order book, indicators work; funding does not), some are perp-only (funding works; nothing Coinbase-sourced does), and only assets on both venues support basis.
Args: venue: Which slice to return. "both" (default) is the spot-and-perp intersection, i.e. exactly the assets basis works for. "spot" is every Coinbase USD market, "perp" every Hyperliquid perp, "spot_only" and "perp_only" the two exclusive sets. search: Optional case-insensitive substring filter, e.g. "SOL". limit: Maximum symbols to return. Counts are always exact and are reported regardless of how many symbols the list itself was truncated to.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| venue | No | both | |
| search | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral detail beyond those annotations: coverage is non-uniform across venues, spot-only and perp-only assets have different capabilities, and symbol counts are always exact even when the returned list is truncated. This gives the agent an accurate mental model of expected behavior without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence delivers the core purpose, followed by a concise but necessary caveat about coverage variance, then a structured Args block. Every sentence adds information: venue semantics, search behavior, limit behavior, and exact-count guarantee. There is no filler or redundant restating of schema defaults.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to enumerate return fields. It covers all invocation-relevant context: what the tool lists, why to call it first, venue-specific capabilities, parameter options, and exact-count behavior. The explanation of basis requiring both venues also ties into the sibling market_pulse_basis tool, making the broader tool landscape coherent. Nothing necessary for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden for all three parameters. It fully explains 'venue' with every accepted value and their meaning, 'search' as a case-insensitive substring filter with an example, and 'limit' with the note that counts remain exact regardless of truncation. This is exemplary parameter documentation in the absence of schema-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'List which crypto assets this server can actually answer for, and on which venue.' It immediately differentiates this tool from the market_pulse_* data tools by framing it as a coverage-discovery tool, not a market data tool. The phrase 'Call this before a scan rather than discovering coverage by watching individual symbols fail' further clarifies its distinct role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: 'Call this before a scan', and what to avoid: 'rather than discovering coverage by watching individual symbols fail'. It also provides actionable guidance on venue selection by explaining the semantics of 'both', 'spot', 'perp', 'spot_only', and 'perp_only', so an agent can choose the correct slice. This goes beyond vague context and gives a clear decision rule.
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.
8 tool updates
v0.2.0- First observed
market_pulse_basis - First observed
market_pulse_candles - First observed
market_pulse_funding_rate - First observed
market_pulse_indicators - First observed
market_pulse_orderbook - First observed
market_pulse_price - First observed
market_pulse_summary - First observed
market_pulse_supported_assets
TDQS
Scored across 8 tools
Each tool targets a distinct market-data concept: spot price, OHLCV candles, order book, funding rate, indicators, multi-asset summary, spot-perp basis, and asset coverage. The summary and basis tools aggregate other data but are clearly positioned as multi-asset scans, so an agent can pick the right granularity without confusion.
All eight tools follow the same market_pulse_<resource> pattern, e.g. market_pulse_price, market_pulse_candles, market_pulse_funding_rate. There is no mixing of conventions or vague verbs, making the set predictable even though names are noun-based rather than verb_noun.
Eight tools is a well-scoped size for a market-data server. Each tool earns its place: price/candles/orderbook/funding provide raw data, indicators add derived analysis, summary and basis offer synthetic views, and supported_assets avoids dead-end queries.
The surface covers the full read-only workflow for crypto market pulse: quote, candles, order book, funding, technical indicators, cross-venue basis, and coverage discovery. There are no obvious dead ends; the only possible additions like historical funding or trade tape are non-essential for the stated purpose.
Maintenance
Related MCP Connectors
Real-time crypto market data: candles, tickers, orderbooks across 13+ exchanges via MCP.
Crypto market data for AI agents: live prices, OHLCV, sentiment, indicators and exchanges.
Live crypto market data: prices, funding, OI, liquidations, regimes, GEX, whales, sentiment, macro.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides real-time and historical cryptocurrency market data from 100+ exchanges including prices, OHLCV data, market statistics, and order books through the CCXT library with intelligent caching.-
- FlicenseNot gradedqualityDmaintenanceProvides real-time and historical cryptocurrency market data from major exchanges through CCXT. Supports live price lookups, historical OHLCV queries, and includes lightweight caching for improved performance.-
- FlicenseNot gradedqualityDmaintenanceProvides real-time and historical cryptocurrency market data using ccxt, enabling users to fetch live prices, historical candlestick data, and stream real-time ticker updates across multiple exchanges.14-
- AlicenseAqualityDmaintenanceProvides live cryptocurrency market data from over 100 exchanges, enabling AI agents to fetch prices, order books, funding rates, and more for trading analysis and arbitrage opportunities.132MIT