
A fixed, versioned definition of market state — recorded at the time, never recomputed, verifiable by anyone.
DAMO describes the state of a crypto market across 10 fixed timeframes using exactly 4 deterministic states. Rule-based, not machine learning.
Market state data only. Not a trading signal. Not investment advice.
Connect DAMO in one minute
DAMO is a remote MCP server. No account, no API key, no sign-in. Free tier: 500 state values per client per UTC day.
Claude (web or desktop app)
Open Settings, then Connectors, then Add custom connector.
Name: DAMO. URL: https://api.damolive.com/mcp
Leave authentication as no sign-in, add it, then press Connect.
In a new chat, ask for a market state.
Claude Code
claude mcp add --transport http damo https://api.damolive.com/mcpOther MCP clients
Any client that supports remote MCP servers (Streamable HTTP) can use this configuration:
{"mcpServers": {"damo": {"url": "https://api.damolive.com/mcp"}}}Try asking
What is the DAMO VERIFIED state of BTC on the 4h timeframe, and which candle close is it from?
What is the forming 1h state of ETH right now? Is it final?
Show the DAMO state definitions.
DAMO describes market states. It is not investment advice.
Quick start
Connect: add https://api.damolive.com/mcp to any MCP client that supports Streamable HTTP. No account or key.
Ask: “What is the DAMO VERIFIED state of BTC on the 1h and 1d timeframes?”
Your agent receives the recorded states with a citation line. See the example under “Connect an MCP client”.
Status (as of 2026-10-27)
Component
Status
DAMO API and MCP server (for AI agents and developers)
Released
DAMO WATCH (homepage, 44 assets)
Released
DAMO VERIFIED recording (44 assets)
BTCUSDT since 2026-09-28, other assets since 2026-10-10 (UTC). QNTUSDT recording stopped on 2026-10-26; its past records are kept.
Daily attestations on Base mainnet
Running since 2026-10-05
Market state input
DAMO composite since 2026-10-26 00:00 UTC (engine 1.1). Earlier records (engine 1.0) are kept as they were.
API and MCP
No account or API key. Free tier: 500 state values per client per UTC day (1 state value = 1 symbol × 1 timeframe). Every state response shows the remaining quota, a citation line and a source URL.
Fewer values: add timeframes=15m,1h (MCP: “timeframes”: [“15m”,”1h”]) and only those are returned and counted. Unchanged state: every state response carries an ETag. Send its value back as the query parameter if_none_match (for example ?timeframes=1h&if_none_match=YOUR_ETAG). If nothing changed the API answers 304 Not Modified with no body, and it is not counted against the quota. VERIFIED states change only when a candle closes.
HTTP API
OpenAPI
Remote MCP server (Streamable HTTP, MCP 2026-07-28 and earlier)
Agent skill file:
Official MCP Registry:
com.damolive/market-state
MCP tools
get_market_state, get_market_states, list_symbols, get_state_definitions
curl -s https://api.damolive.com/v1/market-state/BTCUSDTConnect an MCP client
Any MCP client that supports Streamable HTTP can connect to the server URL. No key is required for the free tier.
Claude Code
claude mcp add --transport http damo https://api.damolive.com/mcpJSON config (most MCP clients)
{
"mcpServers": {
"damo": { "url": "https://api.damolive.com/mcp" }
}
}Example
The agent calls get_market_state with:
{"symbol": "BTCUSDT", "timeframes": ["1h", "1d"]}A real response, trimmed (2 state values counted):
{
"symbol": "BTCUSDT", "layer": "verified", "as_of": "2026-10-14T01:40:03.748Z",
"vector": [null, null, null, 2, null, null, 2, null, null, null],
"states": {
"1h": {"state": "weakening", "state_code": 2, "candle_status": "closed", "final": true,
"candle_close": "2026-10-14T01:00:00Z", "engine_version": "1.0",
"seq": 29610, "hash": "2952c6acb2dd92e9…", "stale": false},
"1d": {"state": "weakening", "state_code": 2, "candle_status": "closed", "final": true,
"candle_close": "2026-10-14T00:00:00Z", "engine_version": "1.0",
"seq": 29532, "hash": "924b7042d054a872…", "stale": false}
},
"citation": "DAMO VERIFIED · BTCUSDT · recorded state as of 2026-10-14T01:40:03.748Z · damolive.com"
}An answer that uses it cites the source line, for example:
“BTCUSDT is in the weakening state on both 1h and 1d (DAMO VERIFIED · BTCUSDT · recorded state as of 2026-10-14T01:40:03.748Z · damolive.com).”
The same request over HTTP:
curl -s "https://api.damolive.com/v1/market-state/BTCUSDT?timeframes=1h,1d"Compact responses
Add format=compact to get only the symbol, layer, time, the 10-value vector, a short citation line and the remaining quota. It is counted the same way. The default full format adds per-timeframe seq, hash and engine version, for citing and checking records.
curl -s "https://api.damolive.com/v1/market-state/BTCUSDT?timeframes=1h,1d&format=compact"Signed responses
Every state response is signed by DAMO with Ed25519, so an agent can check that the values came from DAMO and were not changed on the way. HTTP: header DAMO-Signature. MCP: tool result _meta. Add proof=1 to also get the signature in the body.
Public keys: https://api.damolive.com/.well-known/damo-keys.json
The signature shows who sent the values. That a VERIFIED value was recorded at the time is shown by its seq, hash and the daily attestation anchored on Base mainnet.
What DAMO is — and is not
Deterministic and rule-based. Not machine learning. The same closed candles always produce the same state.
A state description, not a trading signal. DAMO never executes trades and does not recommend buying or selling.
Not a price feed. DAMO publishes its own state outputs only. It does not redistribute exchange prices or candles.
The state model
Exactly four states. The codes are permanent and will never be reassigned.
Code
State
Color
1
bull_momentum
green
2
weakening
red
3
bear_momentum
blue
4
recovery
orange
Ten fixed timeframes, always in this order:
1m · 5m · 15m · 1h · 4h · 12h · 1d · 3d · 1w · 1MA market’s full state is a 10-value vector in that order:
BTCUSDT → [4, 3, 3, 3, 3, 2, 2, 1, 1, 4]The same candles always produce the same state. All times are UTC.
Two layers: VERIFIED and LIVE
DAMO VERIFIED — What DAMO recorded then.
The state of each confirmed candle, recorded once when the candle closes. Final. Never changed.
DAMO LIVE — What DAMO sees now.
The state of the candle still forming, with how far the candle has progressed (0.0–1.0). Provisional — it may change until the candle closes. Never written into the verified record.
Why both? A monthly candle that closed a month ago says little about today. LIVE shows the present; VERIFIED shows exactly what was known at each point in time.
How it can be checked
Append-only hash chain — every record carries the hash of the one before it
Real time only — states are recorded as candles close; past periods are never back-filled
Honest gaps — if the recorder was not running, the gap is recorded as a gap
Off-site daily backups — with a Merkle root for each UTC day
Daily attestation — a Merkle root of each UTC day’s records, linked to the previous day’s attestation
Anchored on Base mainnet — each daily attestation hash is written to a public, append-only contract. Nobody, including DAMO, can change or delete an anchored entry
Engine versions — a change to the state engine is released as a new engine version. Earlier records are never recomputed
Each VERIFIED value carries its seq and hash, so an answer that cites it can be checked later against the anchored daily attestation.
What does not change
The 4 state codes and the 10 timeframes are permanent. Existing codes never change meaning.
Any change to the state engine is released as a new engine version. Every VERIFIED value carries its engine version.
Records made with an earlier engine version are kept unchanged and are never recomputed.
Not provided
Prices or candles. DAMO publishes its own state outputs only.
Order book, funding rates or intrabar events.
Forecasts, trading signals or investment advice. DAMO never executes trades.
Bulk historical exports. The full recorded history is not offered as a download.
Verify it yourself
Anchor contract on Base mainnet (source code verified on Basescan):
0x67FeC2A19B3e3eb26d80Ad87D19e33dfc39F5766First anchored days for BTCUSDT: 2026-09-28 to 2026-10-04. New days are anchored daily after the UTC day closes. All 44 assets are anchored daily from 2026-10-10 (UTC).
Anyone can read the contract directly: heads(symbol), attestationOf(symbol, day), isAnchored(symbol, day, attestationHash).
Markets
44 assets, including BTCUSDT. Every asset is recorded with the same engine, the same four states and the same ten timeframes. Full list and selection criteria: Coverage.
Since 2026-10-26 00:00 UTC, market states are computed from the DAMO composite, built from several public crypto perpetual futures markets. The calculation and settings did not change; only the input did (engine version 1.1). Records made before that time (engine version 1.0, single reference market) are kept unchanged and are never recomputed. DAMO publishes its own state outputs only, not raw prices or candles. DAMO does not accept listing fees.
Evaluate it yourself
DAMO does not claim that its states predict prices. The recorded history exists so that anyone — people or AI systems — can evaluate its usefulness independently.