
Nexus AI News
io.github.99darwinv0.1.0Updated Oct 7, 2026
Deduplicated, classified AI industry news: search, browse, and filter by vertical and event type.
Overview
Read-only MCP access to a deduplicated, classified AI industry news feed, with search, latest-item browsing, and feed statistics.
- What it does
- Exposes a public, stateless, read-only news feed over Streamable HTTP. The search_news tool does full-text search with phrases, OR and -exclude, filterable by vertical, event type, source and date; get_latest_news returns newest items first with the same filters and cursor pagination via next_cursor; get_feed_stats returns total counts plus counts per vertical and event type. Items are deduplicated and classified into 21 verticals and eight event types, with excerpts taken directly from source text rather than generated summaries.
- When to use it
- Useful when an assistant needs current AI industry news, funding and launch events, or papers, and should filter or search them by topic, source or date. A good fit for research, monitoring and briefing workflows that want real feed rows instead of model-generated summaries.
- Requirements
- A remote MCP endpoint over Streamable HTTP; no local runtime, package, account or API key is needed for the hosted server. Network access to the endpoint is required. Running the project yourself instead needs Node.js with pnpm, PostgreSQL, and credentials such as TYPESAFE_API_KEY and POSTGRES_PASSWORD.
Installation
In SourceWeft
- Open Nexus AI News in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Other MCP clients
Add this to your client's mcpServers config.
{
"mcpServers": {
"nexus": {
"type": "http",
"url": "https://nexus.carapace.bot/mcp"
}
}
}README
Nexus
A Jev-powered AI news feed.
[TypeScript] [PostgreSQL] [License] [Docker]
Nexus ingests AI news from multiple sources, dedupes it, classifies each item with a single Jev (TypeSafe System One) call, and serves the result as a reverse-chronological feed with filters and a guarded, extractive chat search. No graph database, no generative LLM in the request path.
Quick Start
The client opens at http://localhost:5173 and the API serves at http://localhost:3001.
Monorepo Layout
Adding a Source Adapter
The primary contribution path is adding new data sources. Every adapter feeds raw items into the dedup + Jev enrichment pipeline, which classifies and inserts them into the feed automatically.
The RawItem Interface
Write Your Adapter
Extend BaseAdapter and implement fetchItems(). You get rate limiting, exponential retry with backoff, and URL-based deduplication for free.
Existing Adapters
Register Your Adapter
- Add your adapter to the adapter list in
packages/agent/src/start.ts:
-
Write a test in
packages/agent/src/sources/__tests__/following existing patterns. -
Run tests:
pnpm --filter @nexus/agent test
Jev Enrichment
Every deduped RawItem gets exactly one call to TypeSafe's System One API (POST https://api.typesafe.ai/v1/systemone, model jev-latest, Bearer TYPESAFE_API_KEY). Jev is a decision model — it answers typed questions (Noul, Choice, Score) against structured JSON, it does not generate text. One call answers all four questions for an item:
is_ai_relevant(Noul) — dropped if confidence < 0.6vertical(Choice) — one of the 21Verticalvalues, ornoneevent_type(Choice) —launch | funding | release | acquisition | paper | update | shutdown | othersignificance(Score) — a 5-point rubric mapped to 0.2–1.0
The excerpt shown in the feed is the first 280 characters of the source content — never an LLM summary, so it can't hallucinate.
Chat Search
POST /api/chat is a guarded, extractive search box, not a chatbot. It classifies the query with one Jev call (on-topic check, vertical/event-type/timeframe extraction), then returns real rows from feed_items via Postgres trigram search. There is no generative model anywhere in the chat path — there's nothing for a prompt injection to talk to.
MCP Server
The feed is exposed to agents as a public, read-only Model Context Protocol server over Streamable HTTP:
Add it to Claude Code with claude mcp add --transport http nexus https://nexus.carapace.bot/mcp. Stateless (no sessions), extractive only — same validation as GET /api/feed, no model calls. Registry manifest: server.json.
Data Model
feed_items
id (uuid) · title · url (unique) · source · published_at · excerpt · vertical · event_type · significance (0.0–1.0) · created_at
Verticals
21 spatial-cluster categories, defined in packages/shared/src/types.ts (e.g. foundation_models, agents, safety_alignment, consumer_products, ...).
Event Types
launch | funding | release | acquisition | paper | update | shutdown | other
Contributing
- Fork the repo and create a branch:
feat/my-feature,fix/some-bug, orchore/cleanup - Write conventional commit messages:
feat: add devto adapter,fix: handle empty RSS feed - Run checks before opening a PR:
- Keep PRs focused — one adapter or feature per PR.
Environment Variables
Tech Stack
- Database — PostgreSQL 16 (
raw_items,feed_items, pg_trgm search) - API — Fastify
- Client — Vite + React
- Search — Fuse.js (client-side, loaded items), pg_trgm (server, chat + feed search)
- Agent — TypeSafe Jev (System One) for enrichment and chat classification
- Deploy — Railway (Postgres + API) + Vercel (client)
Cost
Enrichment is roughly 1 Jev call per new deduped item, at ~50–100 items/day across all sources, plus 1 Jev call per chat query. There is no Neo4j, no Redis, and no generative LLM anywhere in the pipeline — that's the entire compute bill.
License
Source: README.md at commit 0a59cfc
Tools
0Version history
1- v0.1.0LatestOct 7, 2026


