Dawnscan answers one question: which projects on Robinhood Chain are still building, what have they shipped, and which of them is nobody looking at? That is the shape of a question someone asks an assistant, so Dawnscan is available as an MCP server — five tools an assistant can call while answering.
It runs beside the assistant, not on Dawnscan's servers. It holds no database and no
credentials: it reads the same public API anyone can curl. That is why
the API came first — the catalogue's rules live in one place, and this is a thin client over
them.
Install
pnpm --filter @hey/mcp build
Then point a client at apps/mcp/dist/index.js.
Claude Code — add it with the CLI:
claude mcp add hey-research -- node /absolute/path/to/hey-research/apps/mcp/dist/index.js
Claude Desktop — in claude_desktop_config.json:
{
"mcpServers": {
"hey-research": {
"command": "node",
"args": ["/absolute/path/to/hey-research/apps/mcp/dist/index.js"]
}
}
}
Set HEY_API_URL to read a different instance (http://localhost:3000 while developing). Set HEY_API_KEY
to read with your key's allowance (M13-E); the server never prints the key.
It defaults to https://dawnscan.fun.
The five tools
| Tool | The question it answers |
|---|---|
search_projects |
"What is AgentOS?" · "Whose token is 0xa000…?" |
list_projects |
"What is still being built?" · "What launched on Pons?" · "Which infra projects are active?" |
get_project |
"Tell me everything about this project." |
list_ships |
"What shipped this week?" · "Is this project alive?" |
this_week |
"What happened on Robinhood Chain this week?" |
list_projects takes Dawnscan's own discovery surfaces as surface:
still-building— kept shipping through a market drawdown Dawnscan trackedunder-the-radar— real activity, little market attentionshipping-now,most-active,new-builders,back-from-dormancy,utility,memes
plus kind, status, narrative, launchpad, has and sort.
What the server will not let an assistant say
The tool descriptions and the rendering are part of the product, not packaging: they are what a model reads before deciding whether Dawnscan can answer, and what it quotes afterwards.
- No tool ranks by price, values a token, or recommends anything, because Dawnscan does not.
server.test.tsfails if a description ever picks up the words buy, invest, undervalued, price target or predict. - "Still Building" never appears without its meaning. Every rendering that shows the badge carries: verified activity continuing through a market drawdown Dawnscan tracked — a record of what happened, not a prediction and not a buy signal.
- Absent stays absent. A project with no market reading gets no market line — never a zero, a dash or an "n/a" an assistant might average or compare. A project Dawnscan has not measured says so, in words, because that is a different answer from measuring and finding nothing.
- A market figure never travels without its provider, and the text says outright that market data is context and that Dawnscan never orders projects by price.
- Every ship carries how it is backed and where it came from, so an assistant cites rather than asserts, and a self-reported update can never read like a verified one.
- Unresearched is not a finding. An
INDEXEDrecord renders as "activity not researched yet", never as its rawUNKNOWNstatus. - Failure is not an empty answer. An unreachable Dawnscan, a rate limit or a missing slug
each come back as
isErrorwith a sentence saying what happened — never as "no results", which an assistant would summarise as "there are no such projects".
The server's instructions, which a client shows the model before any call, state that Dawnscan
holds no wallet, holder or trading data and that none of this is investment advice.
How it is built
| Piece | Where |
|---|---|
| stdio entry point | apps/mcp/src/index.ts |
| Tool definitions and descriptions | apps/mcp/src/server.ts |
| HTTP client for the public API | apps/mcp/src/client.ts |
| Rendering (pure, unit-tested) | apps/mcp/src/render.ts |
| Contract tests over a real MCP client | apps/mcp/src/server.test.ts |
server.test.ts drives the server through an actual Client over the in-memory transport,
so what is tested is the contract a client gets — the tool list, the argument schemas and
the text that comes back, including on failure.
What is deliberately not here
- No write tools. Submitting a project, claiming ownership and posting an update are things a person does on the site, signed in, with an audit trail. An agent must not do them on someone's behalf.
- No HTTP transport yet. stdio needs no hosting and adds no load to Dawnscan's box. A remote transport is worth building when someone actually wants to run this without a checkout.