Nexus AI News
概要
作者による説明(英語の原文)
Deduplicated, classified AI industry news: search, browse, and filter by vertical and event type.
PopNx MCPの3つの柱
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
- 利用者の声iレビューはまだありませんレビューは今後のステップで、アカウント機能と一緒に始まります
- 私たちの基本チェックi3項目中3項目に合格公開情報からチェック。コードはまだスキャンしていません
- 利用状況iとても新しい★ –
できること
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
- 接続方法: クラウドで動く
- トランスポート: Streamable HTTP
- カテゴリ: 検索・AIの記憶
インストール
使っているAIアプリを選んで、設定をコピーしてください。
インストールの前に
- 基本チェック:3項目中3項目に合格
- 作者のサーバーで動きます。あなたが頼んだ内容は、作者のサーバーを通ります。
- できること:3件(ツール) search_news, get_latest_news, get_feed_stats
- レジストリには、入力が必要なキーは載っていません。
必要なもの
- クラウドで動くインストール不要。インターネット経由でつながります
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
ウェブ、デスクトップ、モバイルのClaudeで使えます:
- Settings → Connectors を開く
- Add custom connector を押す
- 下のアドレスを貼り付けて Add を押す
- サインインを求められたら、作者のサービスにサインインする
https://nexus.carapace.bot/mcpターミナルでこれを実行します
claude mcp add --transport http nexus https://nexus.carapace.bot/mcpまたは、設定を自分でコピーする
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"nexus": {
"url": "https://nexus.carapace.bot/mcp"
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
または、設定を自分でコピーする
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"nexus": {
"type": "http",
"url": "https://nexus.carapace.bot/mcp"
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
ChatGPTがつなげるのは、インターネット上のサーバーだけです:
- ウェブ版のChatGPTを開き → Settings → Connectors (Apps)
- Create または Add を押す(プランによっては、先に Advanced で Developer mode をオンにする必要があります)
- 下のアドレスを貼り付け、名前を付けて保存する
- サインインを求められたら、作者のサービスにサインインする
https://nexus.carapace.bot/mcpメニューの名前は、プランや時期によって少し違うことがあります。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
できること
ツールの名前と説明は、サーバーが2026年11月8日に返したそのままの内容です。書いたのは作者で、私たちではありません。プレーンテキストとして表示しています。
search_newsFull-text search over indexed AI news. Supports quoted phrases, OR, and -exclusion. Results are ranked by relevance blended with recency; not paginated.
get_latest_newsMost recent AI news items, newest first, with optional filters. Pass the returned next_cursor back as `cursor` to fetch older items.
get_feed_statsTotal item count plus counts per vertical and per event_type. Use to discover valid filter values and where coverage is dense.
基本チェックi
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月8日にチェック
- ✓ 合格
作者とリポジトリが一致
レジストリ名は、リポジトリを所有するGitHubアカウント 99darwin で確認済みです
- … 未チェック
今もメンテナンスされている
このリポジトリはまだGitHubから読み取っていません
- … 未チェック
ライセンスがある
このリポジトリはまだGitHubから読み取っていません
- ✓ 合格
エンドポイントが応答する
1578ミリ秒で応答(HTTP 200)
- – 対象外
OAuthでサインイン
サインイン不要
- ✓ 合格
ツールの説明に隠れた指示がない
3件のツールの説明を読み、AIへの隠れた指示は見つかりませんでした
検索・AIの記憶のほかのサーバーとの比較i
- このカテゴリのほかの5717件のうち0%よりスターが多い
- このカテゴリのほかの5717件のうち55%より最近レジストリに公開
- 基本チェックの結果が、このカテゴリのほかの5717件のうち100%と同じかそれ以上
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
よくある質問
Nexus AI Newsは安全ですか?
当てはまる基本チェック3項目のうち3項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
どんなキーやコードが必要ですか?
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
パソコンで動きますか、それともクラウドですか?
作者のクラウドで動きます。インストール不要でインターネット経由でつながりますが、送った内容は作者のサーバーを通ります。
今もメンテナンスされていますか?
GitHubリポジトリの最終更新は–、最新バージョン(0.1.0)がレジストリに届いたのは32 日前です。
どのアプリで使えますか?
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。URLでつながるので、リモートMCPサーバーに対応したアプリ(開発者モードのChatGPTなど)でも使えます。
代わりに使えるものは?
同じカテゴリには:Context7, Codebase Memory, Exa
代わりの候補
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Codebase Memory
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Exa
Connect AI agents to Exa for web search, content fetching, and multi-step research.
作者のREADME
READMEを開く
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Nexus
A Jev-powered AI news feed.
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.
Sources (arxiv, hackernews, github, twitter, rss)
│ ▼ dedup.ts (URL → title → arXiv-id → Jaccard + entity fingerprints) │ ▼ PostgreSQL raw_items │ ▼ Jev enrichment (TypeSafe System One, model jev-latest, 1 call/item) relevant? (Noul) · vertical (Choice) · event_type (Choice) · significance (Score) │ ▼ PostgreSQL feed_items (reverse-chron, indexed) │ ▼ Fastify API — GET /api/feed · GET /api/feed/meta · POST /api/chat │ ▼ React feed client — ActivityFeed, FilterBar, HotCards, guarded ChatBox
Quick Start
# 1. Start infrastructure (PostgreSQL)
docker compose up -d
2. Install dependencies
pnpm install
3. Build all packages
pnpm build
4. Start API and client dev servers (separate terminals)
pnpm dev:api pnpm dev:client
5. Run the agent (source polling + Jev enrichment) separately
pnpm --filter @nexus/agent start
The client opens at http://localhost:5173 and the API serves at http://localhost:3001.
Monorepo Layout
| Package | Path | Description |
|---|---|---|
@nexus/shared | packages/shared | TypeScript interfaces, enums, constants, validation — imported by all packages |
@nexus/agent | packages/agent | Source adapters + dedup + Jev enrichment |
@nexus/api | packages/api | Fastify REST server for the feed and chat search |
@nexus/client | packages/client | React feed UI (Vite) |
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
// packages/agent/src/sources/types.ts
interface RawItem { source: string; // adapter name, e.g. "arxiv" source_url: string; // canonical URL for deduplication title: string; // headline / paper title content: string; // body text (Jev classifies, excerpt is sliced from here) published_at: string; // ISO 8601 timestamp raw_metadata: Record ; // source-specific fields }
Write Your Adapter
Extend BaseAdapter and implement fetchItems(). You get rate limiting, exponential retry with backoff, and URL-based deduplication for free.
// packages/agent/src/sources/my-source.ts
import type { RawItem } from "./types.js"; import { BaseAdapter } from "./base-adapter.js";
export class MySourceAdapter extends BaseAdapter { name = "my-source"; priority = "P1" as const;
constructor() { super({ pollIntervalMs: 30 * 60 * 1000, // how often to poll rateLimitMs: 2000, // min delay between requests }); }
protected async fetchItems(): Promise { const response = await fetch("https://api.example.com/items"); if (!response.ok) throw new Error(Fetch failed: ${response.status});
const data = await response.json(); return this.dedupeByUrl( data.map((item: any) => ({ source: this.name, source_url: item.url, title: item.title, content: item.body, published_at: new Date(item.date).toISOString(), raw_metadata: { id: item.id }, })) ); } }
Existing Adapters
| Adapter | Source | Priority | Poll Interval | Auth |
|---|---|---|---|---|
ArxivAdapter | arXiv RSS (cs.AI, cs.CL, cs.LG) | P0 | 30 min | None |
HackerNewsAdapter | HN Algolia API | P0 | 15 min | None |
GitHubTrendingAdapter | GitHub Search API | P0 | 60 min | Optional GITHUB_TOKEN |
TwitterAdapter | X/Twitter API v2 | P1 | 15 min | X_BEARER_TOKEN required |
RssAdapter | Company blogs, TechCrunch AI, The Verge AI, Simon Willison | P1 | 2h (default) | None |
Register Your Adapter
- Add your adapter to the adapter list in
packages/agent/src/start.ts:
import { MySourceAdapter } from "./sources/my-source.js";
const adapters: SourceAdapter[] = [ new HackerNewsAdapter(), new ArxivAdapter(), new GitHubTrendingAdapter(), new MySourceAdapter(), // add here ];
- 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:
https://nexus.carapace.bot/mcp
| Tool | What it does |
|---|---|
search_news | Full-text search (phrases, OR, -exclude), filterable by vertical / event_type / source / since |
get_latest_news | Newest items first, same filters, cursor-paginated via next_cursor |
get_feed_stats | Total count plus counts per vertical and event_type |
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:
pnpm test # run all tests
pnpm lint # eslint pnpm typecheck # tsc --noEmit
- Keep PRs focused — one adapter or feature per PR.
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
TYPESAFE_API_KEY | Yes | — | TypeSafe API key for Jev (System One) enrichment and chat classification |
POSTGRES_HOST | No | localhost | PostgreSQL host |
POSTGRES_PORT | No | 5432 | PostgreSQL port |
POSTGRES_DB | No | nexus | PostgreSQL database name |
POSTGRES_USER | No | nexus | PostgreSQL user |
POSTGRES_PASSWORD | Yes | — | PostgreSQL password |
X_BEARER_TOKEN | No | — | X/Twitter API bearer token (enables Twitter adapter) |
GITHUB_TOKEN | No | — | GitHub PAT (raises rate limits for GitHub adapter) |
API_KEY | No | — | API key for write/admin endpoints |
API_PORT | No | 3001 | API server port |
API_HOST | No | 0.0.0.0 | API server bind address |
CLIENT_PORT | No | 5173 | Client dev server port |
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
MIT