market-pulse-mcp
market-pulse-mcp
LLM에 실시간 암호화폐 시장 데이터를 제공하는 MCP(Model Context Protocol) 서버입니다. 현물 가격, OHLCV 캔들, 호가창 스냅샷, 무기한 펀딩 레이트, 그리고 직접 계산한 몇 가지 기술적 지표를 제공합니다. 모든 데이터 소스는 공개적이고 키가 필요 없는 거래소 API이므로 설정할 것도, 만들 계정도 없습니다.
Brandon Perez(@remyblanks77)가 작성한 작품으로, 깔끔한 MCP 서버 구현을 보여줍니다: 타입이 지정된 Python, 작은 의존성 범위, 그리고 pandas나 ta-lib 대신 손으로 직접 작성한 지표 수학.
기능
market-pulse-mcp는 MCP stdio 전송을 통해 여섯 가지 도구를 제공합니다:
도구 | 설명 | 데이터 소스 |
| 현재 현물 가격, 최우선 매수/매도 호가, 24시간 거래량 | Coinbase Exchange |
| OHLCV 캔들 | Coinbase Exchange |
| 최상위 호가 스냅샷, 스프레드, 매수/매도 불균형 | Coinbase Exchange |
| 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]"두 방법 모두 stdio를 통해 서버를 실행하는 market-pulse-mcp 콘솔 스크립트를 설치합니다.
Claude Code에서 구성
프로젝트의 .mcp.json에 아래 내용을 추가하거나(또는 claude mcp add 실행):
{
"mcpServers": {
"market-pulse": {
"command": "market-pulse-mcp",
"args": []
}
}
}활성화된 virtualenv에 설치하지 않았다면 command를 해당 바이너리로 직접 지정하세요. 예: /path/to/owner/my-mcp-server/.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을 재시작하세요. 망치/도구 아이콘 아래에서 위 도구들을 확인할 수 있습니다.
설계 노트
왜 지표를 직접 계산하나요? 이 서버의 핵심 목표는 MCP 서버 구현을 깔끔하게 보여주는 것입니다: 타입이 지정된 Python, 작은 의존성, 그리고 표준 라이브러리만으로 작동하는 지표 계산. RSI, EMA, ATR, 실현 변동성은 모두 indicators.py에서 순수 Python 함수로 구현되어 있으며, 각 지표는 사전 계산된 알려진 값에 대해 테스트됩니다.
왜 Coinbase와 Hyperliquid인가요? 두 거래소 모두 인증 없이 공개 엔드포인트를 제공하며, 인증 토큰, API 키, 서명 요청이 필요 없습니다. 즉, 이 서버는 사용자 설정이 전혀 필요 없습니다.
왜 stdio인가요? mcp SDK의 stdio 전송은 로컬 및 원격 MCP 호스트 모두에서 가장 간단하게 구성할 수 있는 방법입니다. 추가 네트워크 노출 없이 표준 입력/출력으로 JSON-RPC 메시지를 전달합니다.
오류 처리. 모든 도구는 네트워크 오류, 잘못된 심볼, 또는 유효하지 않은 입력에 대해 구조화된 오류를 반환합니다. 클라이언트는 실패한 도구 호출을 별도로 처리하며, LLM이 의미 있는 동작(예: 잘못된 심볼 재시도, 일시적 오류 재시도)을 수행할 수 있도록 합니다.
설치
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]"두 방법 모두 stdio 위에서 서버를 실행하는 market-pulse-mcp 콘솔 스크립트를 설치합니다.
사용 예시
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.개발
pytest # offline tests only (default; see pyproject.toml)
pytest -m integration # also hit live Coinbase / Hyperliquid APIs프로젝트는 표준 Python 구성(pyproject.toml, src 레이아웃)을 사용하며, 형식 검사에는 mypy, 린트에는 ruff, 테스트에는 pytest를 사용합니다. 테스트는 GXP7을 실행하면 됩니다.
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