APIAnnouncements API
The public API behind the Mission Log and the roadmap on this site. Every route listed here is an unauthenticated, read-only GET: there is no account, no key and nothing to arrange before calling it. Read what you like, as often as you like.
Base URL https://announcements.univerlab.org — Anonymous, read-only GET. Every response carries the CORS origin this site runs on.
Endpoints
GET /
List Mission Log entries
The most recent announcements, newest first, read from the mirror the API keeps at the edge. `offset` and `limit` page through the newest 100 entries that mirror holds.
Parameters
offset — query · integer · optional. How many entries to skip before reading.limit — query · integer · optional. How many entries to return.
Example
curl -s 'https://announcements.univerlab.org/?limit=20'
Response: application/json
GET /feed.atom
Atom feed of the Mission Log
The same entries as an Atom feed, for a feed reader. The response carries an `ETag`; a conditional request that returns it saves the whole body.
Parameters
If-None-Match — header · string · optional. The `ETag` from an earlier fetch of this feed. When it still matches, the answer is `304 Not Modified` with no body.
Example
curl -s https://announcements.univerlab.org/feed.atom
Response: application/atom+xml
GET /events
Server-sent events stream
A long-lived `text/event-stream`. It opens with a `:ok` comment, sends a `:ping` comment every 30 seconds, and pushes an `entry`, `update` or `roadmap` event whose data is the changed object as JSON. It exists for one live view at a time: hold the connection instead of reconnecting, and close it when the view closes. It answers `503` once 200 listeners are already attached.
Parameters
This route takes no parameters.
Example
curl -s -N https://announcements.univerlab.org/events
Response: text/event-stream
GET /roadmap
List roadmap items
The public roadmap. `state=active` (the default) returns the items the laboratory is working on or has shipped; a single lane (`idea`, `now`, `next`, `later`, `done`) narrows to it. Items carry public fields only — the private ones are never in this answer. The two query shapes that would expose them (`state=all` and `private=1`) are reader-authenticated and answer `401` without a token, so they are not described here.
Parameters
state — query · string · one of: active, idea, now, next, later, done · optional. Which items to return.offset — query · integer · optional. How many items to skip before reading.limit — query · integer · optional. How many items to return.
Example
curl -s 'https://announcements.univerlab.org/roadmap?state=active&limit=20'
Response: application/json
GET /roadmap/{id}
One roadmap item and its announcements
A single public roadmap item, plus the announcements that report on it — newest first, id breaking ties. `{id}` is the `id` of an item returned by `GET /roadmap`. An archived item is a `404` on this public route.
Parameters
id — path · string · required. The item's `id`, exactly as `GET /roadmap` returned it.
Example
curl -s --globoff 'https://announcements.univerlab.org/roadmap/{id}'
Response: application/json
MCP server
The same four read-only tools this site exposes to a browser agent are also served from a real remote MCP server — stateless Streamable HTTP. Point any MCP client at the endpoint:
Endpoint https://univerlab.org/mcp
Add it with the Claude Code CLI
claude mcp add --transport http univerlab https://univerlab.org/mcp
Or in any MCP client’s JSON config
{
"mcpServers": {
"univerlab": { "type": "http", "url": "https://univerlab.org/mcp" }
}
}
Server Card: /.well-known/mcp/server-card.json — The MCP Server Card (SEP-2127) that advertises this server to agents.
- OpenAPI document — This page is generated at build time from the OpenAPI 3.1 description of the same API, so the page and the description cannot drift. Fetch it for the machine-readable version of everything above. /openapi/announcements.json
- API catalog — The RFC 9727 catalog that advertises this API to agents. /.well-known/api-catalog
- auth.md — The file that states plainly that there is nothing to register for here, and what is asked of a client that reads this API. /auth.md