HEY Research Lab
Evidence-backed Robinhood Chain research: builders, ships, contracts, changes, market context.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"hey-research": {
"command": "npx",
"args": [
"@hey-research-lab/mcp"
]
}
}
}Runnable packages
0.3.0stdioRemote endpoints
https://heyresearch.xyz/mcpstreamable-httphttps://heyresearch.xyz/mcp/researchstreamable-httpWhat it can do
Tool inventory
Tools (14)
🟢research_answer(capability, project, q, projects, address, ...)
Is this Robinhood Chain project still being built, what did it ship, what changed, is this contract its own? One bounded answer, cited. capability: research_project or builder_status (q: a name or $TICKER, or address, or project: a slug; a name several projects share lists them); what_changed (project or chain, 1–30 days); verify_project (address, project?); compare_builders (2–4, no winner); unknowns (every coverage state). Claims FACT/DERIVED/UNKNOWN with freshness and evidence ids. Not price advice or a safety verdict.
Input Schema
{
"type": "object",
"properties": {
"capability": {
"type": "string",
"enum": [
"research_project",
"what_changed",
"builder_status",
"verify_project",
"compare_builders",
"unknowns"
]
},
"project": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"q": {
"type": "string",
"minLength": 2,
"maxLength": 64
},
"projects": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"minItems": 2,
"maxItems": 4
},
"address": {
"type": "string",
"pattern": "^0[xX][a-fA-F0-9]{40}$"
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 30
},
"types": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z_]+\\.[a-z_]+$"
},
"minItems": 1,
"maxItems": 20
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50
},
"building": {
"type": "string",
"const": "only"
},
"detail": {
"type": "string",
"enum": [
"summary",
"full"
]
}
},
"required": [
"capability"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.agent-intelligence-response"
},
"schemaVersion": {
"type": "string",
"const": "1"
},
"capability": {
"type": "string",
"enum": [
"research_project",
"what_changed",
"builder_status",
"verify_project",
"compare_builders",
"unknowns"
]
},
"status": {
"type": "string",
"enum": [
"ok",
"not_found",
"moved",
"invalid_request",
"unavailable"
]
},
"answer": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
},
"required": [
"text"
],
"additionalProperties": true
},
"claims": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"FACT",
"DERIVED",
"UNKNOWN"
]
}
},
"required": [
"id",
"status"
],
"additionalProperties": true
}
},
"evidence": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"additionalProperties": true
}
},
"data": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": true
},
{
"type": "null"
}
]
}
},
"required": [
"schema",
"schemaVersion",
"capability",
"status",
"answer",
"claims",
"evidence",
"data"
],
"additionalProperties": true
}🟢find_projects(query, surface, radar, kind, status, ...)
Which Robinhood Chain project is this name, $TICKER or 0x contract, and is anyone building it? A full 0x address is a contract lookup: its ships in 30 days, the last one with its source. Or browse who is shipping now, back from dormancy, accelerating or building ahead of market attention. Surfaces: building-with-token: verified shipping, active or resumed, with a token whose market is live. still-building: verified activity continuing through a market drawdown HEY tracked. under-the-radar: eligible under HEY's Under the Radar rule (status shipping, active or resumed; Build Momentum at least 30; at least 2 meaningful events in the last 30 days, one of them a ship rather than a commit summary; a fresh reading of an active market beyond a launch curve or a launch pool, for the project's own token) and a positive Discovery Gap — market-attention percentile below the build percentile; a positive gap alone is not enough, and it does not bound attention itself. shipping-now: status SHIPPING. most-active: shipping, active or resumed, by Build Momentum. new-builders: new in 7 days, with a builder source and a counted ship; new-on-hey: any page new in 7 days. back-from-dormancy: status RESUMED, narrowed to verified builders native to the chain (status=RESUMED gives every resumed project). utility, memes: by kind. shipping-in-silence: eligible under the Under the Radar rule AND below the 40th market-attention percentile. accelerating: more meaningful events in 30 days than in the 30 before. builder-radar: the Builder Radar, ranked by verified development, on-chain use and research, never price. shipping-in-silence and accelerating take no other argument (at most 100 rows); builder-radar takes query, radar, limit and offset. Not a ranking by price: a market sort is context, and rows without the figure follow in activity order.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 2,
"maxLength": 120,
"description": "Name, $TICKER or 0x contract (or its start)."
},
"surface": {
"type": "string",
"enum": [
"building-with-token",
"still-building",
"under-the-radar",
"shipping-now",
"most-active",
"new-builders",
"new-on-hey",
"back-from-dormancy",
"utility",
"memes",
"shipping-in-silence",
"accelerating",
"builder-radar"
]
},
"radar": {
"type": "string",
"enum": [
"all",
"pons",
"virtuals",
"other-launch",
"no-token",
"new",
"established",
"most-improved",
"development",
"onchain",
"resumed"
],
"description": "With surface=builder-radar: a Radar view."
},
"kind": {
"type": "string",
"enum": [
"UTILITY",
"MEME",
"HYBRID",
"INFRASTRUCTURE",
"RWA",
"APPLICATION",
"OTHER"
]
},
"status": {
"type": "string",
"enum": [
"SHIPPING",
"ACTIVE",
"QUIET",
"DORMANT",
"RESUMED",
"UNKNOWN"
],
"description": "Activity status."
},
"narrative": {
"type": "string",
"maxLength": 80,
"description": "Narrative slug, e.g. \"ai-agents\"."
},
"launchpad": {
"type": "string",
"maxLength": 40,
"description": "e.g. \"pons\", \"virtuals\"."
},
"has": {
"type": "array",
"items": {
"type": "string",
"enum": [
"token",
"x",
"marketCap",
"launchpad",
"liveMarket",
"verifiedToken",
"trading",
"github"
]
},
"description": "Facts every row must carry."
},
"stage": {
"type": "string",
"enum": [
"curve",
"graduated",
"dex"
],
"description": "Token launch stage."
},
"minLiquidity": {
"type": "number",
"exclusiveMinimum": 0,
"description": "USD; unknown is excluded, never zero."
},
"maxMarketCap": {
"type": "number",
"exclusiveMinimum": 0,
"description": "USD, on the card's valuation reading."
},
"minMarketCap": {
"type": "number",
"exclusiveMinimum": 0
},
"minVolume": {
"type": "number",
"exclusiveMinimum": 0,
"description": "24h volume, USD."
},
"age": {
"type": "string",
"enum": [
"day",
"week",
"month",
"older"
],
"description": "Since the first pool opened."
},
"deployed": {
"type": "string",
"enum": [
"day",
"week",
"month",
"older"
],
"description": "Since the contract was deployed."
},
"sort": {
"type": "string",
"enum": [
"activity",
"shipped",
"shipped7d",
"shipped30d",
"marketCap",
"newest",
"liquidity",
"volume24h"
],
"description": "Default activity; shipped = newest ship first; shipped7d / shipped30d = most meaningful ships in the last 7 / 30 days."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 48,
"description": "Default 24."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "The offset a previous answer gave."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢get_project_snapshot(slug)
Where does this Robinhood Chain project stand? One read by slug — the Research Summary, identity, activity status and Build Momentum, last ships, market context with its kind or why it is withheld, on-chain use, 7-day usage (calls; caller addresses per day, not people), verification, HoodLock locks, latest changes with evidence ids, freshness and what HEY does not know. Context blocks, never building: paid promotion (presence and dates), DefiLlama protocol economics (measured, not tracked or unread), developer footprint. Not price advice.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "A project slug, e.g. \"agentos\"."
}
},
"required": [
"slug"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢get_changes(project, contract, domain, type, since, ...)
What changed on Robinhood Chain today or this week, or for one project or contract? The change ledger: releases, ships, status moves, contract deploys and upgrades, verification, sources, unlocks — one event per change with its own time and precision, when HEY first knew, and its evidence. Newest first by first arrival; for today pass detectedSince; to sync, pass after=c1.0 and keep each cursor. A retraction means HEY no longer makes that claim. Facts, never causes.
Input Schema
{
"type": "object",
"properties": {
"project": {
"type": "string",
"maxLength": 120,
"description": "A project slug."
},
"contract": {
"type": "string",
"pattern": "^\\d{1,10}:0x[0-9a-fA-F]{40}$",
"description": "<chainId>:<address>."
},
"domain": {
"type": "array",
"items": {
"type": "string",
"enum": [
"build",
"contract",
"market",
"token",
"research",
"lock",
"market_integrity"
]
}
},
"type": {
"type": "array",
"items": {
"type": "string",
"enum": [
"build.release",
"build.code_activity",
"build.ship",
"build.status_changed",
"build.dormant",
"build.resumed",
"build.accelerating",
"build.slowing",
"contract.deployed",
"contract.followup_deployed",
"contract.implementation_changed",
"contract.source_verified",
"contract.source_unverified",
"contract.interface_changed",
"contract.usage_changed",
"contract.method_first_observed",
"contract.method_resumed",
"contract.v4_pool_initialized",
"market.status_changed",
"market.liquidity_moved",
"market.volume_spike",
"market.distribution_changed",
"token.launch_stage_changed",
"token.verification_changed",
"research.published",
"research.builder_verified",
"research.owner_verified",
"research.source_added",
"research.source_unavailable",
"research.source_restored",
"research.source_changed",
"research.narrative_assigned",
"lock.unlock_due",
"lock.observed",
"lock.withdrawn",
"market_integrity.event"
]
}
},
"since": {
"type": "string",
"maxLength": 40,
"description": "ISO date: events whose own time is at or after it (events with no source time are left out)."
},
"until": {
"type": "string",
"maxLength": 40
},
"detectedSince": {
"type": "string",
"maxLength": 40,
"description": "ISO instant: start a sync at the first event HEY recorded at or after it."
},
"after": {
"type": "string",
"maxLength": 64,
"description": "Sync forward from this cursor (c1.0 is the start)."
},
"before": {
"type": "string",
"maxLength": 64,
"description": "Browse older than this cursor."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Default 30."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢get_project_timeline(slug, lens, limit, before)
What did this project ship, and when? Builds, releases, code, contract deploys, upgrades and interface changes, token verification, locks and unlocks, each with how precisely HEY knows its time. Lenses: everything, build, code, onchain, market, locks. Paged with the before cursor.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "A project slug, e.g. \"agentos\"."
},
"lens": {
"type": "string",
"enum": [
"everything",
"build",
"code",
"onchain",
"market",
"locks"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Default 30."
},
"before": {
"type": "string",
"maxLength": 400,
"description": "The cursor the previous answer gave."
}
},
"required": [
"slug"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢explain_fact(slug, fact, source)
Why does HEY say a project is Shipping, Dormant or Still Building, or show a figure? The value, FACT, DERIVED or UNKNOWN, the rule and version, the winning source, the inputs, the lineage and the evidence ids. Omit fact to list what can be explained; source.counted takes a source id.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "A project slug, e.g. \"agentos\"."
},
"fact": {
"type": "string",
"enum": [
"market.valuation",
"market.status",
"activity.status",
"build.momentum",
"discovery_gap",
"still_building",
"research.level",
"token.verification",
"source.counted",
"market_integrity.state"
]
},
"source": {
"type": "string",
"maxLength": 80,
"description": "With fact=source.counted: the source id."
}
},
"required": [
"slug"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢get_evidence(id)
What backs this claim? Open the record a HEY answer cited by its typed id — ship:, signal:, abi:, impl:, lock:, source:, claim:, state:, integrity:, narrative:, method:, sourcechange:, security:, v4hook:, v4pool:, ponsgrad: — as a receipt: what it claims, its source URL, when it happened at what precision, when HEY knew, how it is backed. A withdrawn record says so.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z_]+:[A-Za-z0-9:._-]{1,200}$",
"description": "A typed evidence id, e.g. \"ship:2ac87a66-…\"."
}
},
"required": [
"id"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢get_token_market(slug, days, include, min_change_pct)
Does this token still trade? Context beside the building, from HEY's daily index: current reading (valuation kind, provider), price, liquidity, volume and trades by day, lifecycle (deploy, launchpad claim, stage, first trade, launch graduation, permanent lock), pools and depth, supply concentration (shares only, no addresses), contract checks. include=["moves"] adds each day-on-day valuation move with the building events published before it — a sequence, never a cause. Not price advice.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "A project slug, e.g. \"agentos\"."
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 400,
"description": "Days of history; default 30."
},
"include": {
"type": "array",
"items": {
"type": "string",
"enum": [
"moves"
]
}
},
"min_change_pct": {
"type": "integer",
"minimum": 5,
"maximum": 500,
"description": "With moves: smallest move in percent; default 25."
}
},
"required": [
"slug"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢get_contract(address, chainId, slug)
Who made this Robinhood Chain contract, and is it a known project's? Project, creation, deployer (the only account named, with a count of other tracked projects' tokens it deployed), verified source and whose code it is (template, bytecode match or its own), Sourcify's answer, proxy and implementation history, interface changes, 7 days of calls per method (counts, names withheld; a selector's signature candidate — a guess, never a name). Address (chainId default 4663) or slug for all of a project's. An unread proxy is "not read", never "not a proxy". Not a safety verdict.
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"pattern": "^0[xX][a-fA-F0-9]{40}$"
},
"chainId": {
"type": "integer",
"description": "Default 4663."
},
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "A project slug, for all of its contracts."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢get_v4_hook(address)
Who built this Robinhood Chain Uniswap v4 hook? The project HEY ties it to and why (named only while listed; never a creator account), declared callbacks (not a safety verdict), source, hooklist entry, pools by week and unknowns.
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"pattern": "^0[xX][a-fA-F0-9]{40}$"
}
},
"required": [
"address"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢project_diff(slug, from, to)
What changed for this project between two dates (YYYY-MM-DD, at most 400 days apart)? Releases and meaningful ships, status, Build Momentum, valuation and liquidity then and now, and the changes recorded — each from the nearest persisted point with its date and basis. Never a cause.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "A project slug, e.g. \"agentos\"."
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
},
"required": [
"slug",
"from",
"to"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢ask_hey(slug, question)
Asking something else about one project? Put it in free text, by slug, in English or Malay ("did they ship this month?"). HEY answers only from its record, every line tagged FACT, DERIVED or UNKNOWN with its source. Building only; no view on price.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "A project slug, e.g. \"agentos\"."
},
"question": {
"type": "string",
"minLength": 3,
"maxLength": 280,
"description": "The question, in the reader's words."
}
},
"required": [
"slug",
"question"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢chain_overview(view, days, week)
How active is Robinhood Chain? view: days (default; trades, volume, tokens, transactions, launches, ships per day), this-week, weekly-report (an ISO week, or the latest), unlocks (scheduled HoodLock unlocks with proof), build-market (Build Momentum beside market attention). days names no one; other views name projects.
Input Schema
{
"type": "object",
"properties": {
"view": {
"type": "string",
"enum": [
"days",
"this-week",
"weekly-report",
"unlocks",
"build-market"
]
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 400,
"description": "days: 1–400 (default 14); unlocks: 1–365 ahead (default 30)."
},
"week": {
"type": "string",
"pattern": "^\\d{4}-W\\d{2}$",
"description": "weekly-report: e.g. 2026-W37."
}
},
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}🟢market_integrity(slug)
What happened to this project's tracked token market — liquidity against the level it held, trading, a pool migration — beside its builder activity, and where do the two disagree? It describes the token market, never whether development stopped, and never calls a project a rug or safe.
Input Schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "A project slug, e.g. \"agentos\"."
}
},
"required": [
"slug"
],
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"schema": {
"type": "string",
"const": "hey.mcp-api-answer"
},
"api": {
"type": "string"
},
"data": {}
},
"required": [
"schema",
"api"
],
"additionalProperties": true
}Community
Evidence