[ what morrow is · methodology · api · mcp ]

docs.

tokenized equities on robinhood chain trade around the clock, but their underlying stocks only price during nyse and nasdaq hours. morrow publishes a fair value estimate per tracked stock token while the underlying market is closed, with a confidence band, and commits a merkle root of every observation on robinhood chain so each published price is later verifiable. a morrower makes arrows.

the evidence

morrow's claim is that its off-hours number predicts the next open better than the obvious baseline: the stock opens where it closed. that baseline is exactly what morrow outputs when drift is zero, so beating it is the whole job. here is the backtest, scored over historical sessions and stated plainly whichever way it falls.

loading backtest…

methodology, short version

anchorlast official market close per tokendriftweighted blend of 24/7 proxy signal returns since that close, capped; stale proxies are excludedonchainliquidity-weighted twap of the selected uniswap pool over the trailing window. the pool can live in uniswap v2, v3, or v4; each venue's price and ±2% depth are read into one common measure, so the depth floor means the same thing everywhere. weight scales down as depth falls below the floor; the twap is clamped to a maximum deviation around anchor+drift so a thin pool cannot drag fair valuefair valuedepth-scaled blend of the onchain twap and anchor+driftconfidence0-100 from input freshness, pool depth, and proxy agreementbandwidens as confidence fallsspike guardan onchain move beyond the spike threshold inside one window with flat proxies is clamped to the band edge and published with suspect=true, never hiddenregimesmarket_open (passthrough, official prices live), after_hours, weekend, holiday. nyse calendar computed in America/New_York including half days

anchors

the anchor is the last official close per token; the next-open print feeds the accuracy stats. the indexer can maintain both automatically: a configurable delay after the 16:00 et close (13:00 on half days) it inserts the close, and a delay after the 09:30 et open it inserts the open print, skipping weekends and holidays. an automated price that jumps more than the deviation threshold from the previous anchor is rejected unless a corporate action explains it, and a missing anchor past its deadline pages the operator. when an expected close is missed, the engine keeps publishing but caps confidence and widens the band (a stale-anchor cycle), rather than going dark. the admin endpoints remain the manual override for both close and open:

POST /v1/admin/anchors   (bearer ADMIN_TOKEN)
  { "symbol": "tsla", "kind": "close", "price": 250.10,
    "marketTs": "2026-07-10T20:00:00Z" }

verification

each cycle, every observation becomes a canonical leaf: tokenId|cycleId|fairValue|confidence|timestamp, hashed with keccak256. leaves build a sorted-pair merkle tree; the root is committed to the MorrowCommits contract. fetch a proof from /v1/proof, recompute the root yourself, and compare against getCommit(cycleId) on-chain. the explorer runs this check in your browser against the contract over rpc; the mcp tool verify_observation does the same.

spreads and alerts

the spreads board ranks tokens by the absolute spread between the onchain pool price (multiplier-adjusted and dollarized) and morrow fair value, refreshed live. a public telegram channel posts when a token's absolute spread crosses a threshold, with hysteresis and a per-token cooldown so it does not spam on oscillation. messages are data statements only, with an informational-feed, not trading advice footer. the alert bot is generation-gated by a dry-run flag until the operator wires the channel.

chainlink, and what morrow is not

chainlink is robinhood chain's official oracle and feeds stock token prices. morrow does not compete with that feed. morrow's product is the off-hours fair value blend and the verifiable commit trail, a different object. do not frame morrow as a chainlink replacement.

accuracy receipts

each week morrow scores its pre-open fair value against the actual next-open print, per token, and publishes a card with the mean absolute error, the best call, and the cycles committed on-chain. the receipts page lists them, newest first; the api serves the markdown and a rendered png. receipts are generated only, never auto-posted.

api reference

endpointreturns
GET /v1/tokenstracked tokens with ids and pools
GET /v1/priceslatest fair value for all tokens
GET /v1/prices/:symbollatest plus 24h history
GET /v1/prices/:symbol/history?from&to&limit&offsetpaginated history
GET /v1/commits, /v1/commits/:cycleIdcommit records with roots and tx hashes
GET /v1/proof/:symbol/:cycleIdmerkle proof payload for independent verification
GET /v1/accuracy/:symbolrealized error vs actual next-open prints
GET /v1/spreadsonchain vs fair spread per token, sorted by divergence
GET /v1/receipts, /v1/receipts/:weekweekly accuracy cards; card.png for the rendered image
GET /healthper-subsystem status, cycle age, per-source staleness

anonymous calls are rate limited. send an api key in x-api-key for higher limits. when x402 is enabled, price endpoints answer 402 with payment requirements for agent pay-per-query.

mcp install

the @morrow/mcp-server package gives agents read access plus independent verification. claude desktop config:

{
  "mcpServers": {
    "morrow": {
      "command": "npx",
      "args": ["-y", "@morrow/mcp-server"],
      "env": {
        "MORROW_API_URL": "https://your-morrow-api.example",
        "MORROW_RPC_URL": "https://your-robinhood-chain-rpc.example"
      }
    }
  }
}

the fine print

informational feed. not for use in liquidations, settlement, or as sole pricing source. no warranty.