프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

Nexus AI News

제작자: 99darwin버전 0.1.0i★ –i클라우드에서 실행
레지스트리 이름io.github.99darwin/nexus

설치

개요

제작자가 쓴 설명(영어 원문)

Deduplicated, classified AI industry news: search, browse, and filter by vertical and event type.

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 클라우드에서 실행
  • 전송 방식: Streamable HTTP
  • 카테고리: 검색 및 AI 기억

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 1개 중 1개 통과
  • 제작자의 서버에서 실행돼요. 내가 요청한 내용은 제작자의 서버를 거쳐요.
  • 레지스트리에 입력해야 할 키가 나와 있지 않아요.

필요한 것

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

웹, 데스크톱, 모바일의 Claude에서 쓸 수 있어요:

  1. Settings → Connectors 열기
  2. Add custom connector 누르기
  3. 아래 주소를 붙여 넣고 Add 누르기
  4. 로그인하라고 하면 제작자의 서비스에 로그인하기
SettingsConnectors1+ Add2https://…3
https://nexus.carapace.bot/mcp

터미널에서 이 명령어를 실행하세요

claude mcp add --transport http nexus https://nexus.carapace.bot/mcp

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

{
  "mcpServers": {
    "nexus": {
      "url": "https://nexus.carapace.bot/mcp"
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

{
  "servers": {
    "nexus": {
      "type": "http",
      "url": "https://nexus.carapace.bot/mcp"
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요:

  1. 웹에서 ChatGPT 열기 → Settings → Connectors (Apps)
  2. Create 또는 Add 누르기(일부 요금제는 먼저 Advanced에서 Developer mode를 켜야 해요)
  3. 아래 주소를 붙여 넣고 이름을 정한 뒤 저장하기
  4. 로그인하라고 하면 제작자의 서비스에 로그인하기
SettingsConnectors1+ Create2https://…3
https://nexus.carapace.bot/mcp

메뉴 이름은 요금제나 시기에 따라 조금 다를 수 있어요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

아직 이 서버의 도구 목록을 읽지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 99darwin 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • … 아직 점검 안 함

    계속 관리되고 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    엔드포인트 응답

    아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요

  • … 아직 점검 안 함

    OAuth로 로그인

    아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    아직 점검하지 않았어요. 엔드포인트를 점검할 때 도구 목록을 읽어요

검색 및 AI 기억 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 7235개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 7235개 중 55%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 7235개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

Nexus AI News, 안전한가요?

해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

제작자의 클라우드에서 실행돼요. 설치 없이 인터넷으로 연결하지만, 보내는 내용은 제작자의 서버를 거쳐요.

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.1.0)은 30일 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: Context7, Codebase Memory, Exa

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

Context7

제작자: upstash

Up-to-date docs for AI agents

컴퓨터 또는 클라우드★ 64,224MIT3일 전 업데이트
설치

Codebase Memory

제작자: DeusData

Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.

내 컴퓨터에서 실행★ 48,148MIT20일 전 업데이트
설치

Exa

제작자: exa-labs

Connect AI agents to Exa for web search, content fetching, and multi-step research.

클라우드에서 실행★ 5,213MIT44일 전 업데이트
설치

제작자의 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

PackagePathDescription
@nexus/sharedpackages/sharedTypeScript interfaces, enums, constants, validation — imported by all packages
@nexus/agentpackages/agentSource adapters + dedup + Jev enrichment
@nexus/apipackages/apiFastify REST server for the feed and chat search
@nexus/clientpackages/clientReact 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
AdapterSourcePriorityPoll IntervalAuth
ArxivAdapterarXiv RSS (cs.AI, cs.CL, cs.LG)P030 minNone
HackerNewsAdapterHN Algolia APIP015 minNone
GitHubTrendingAdapterGitHub Search APIP060 minOptional GITHUB_TOKEN
TwitterAdapterX/Twitter API v2P115 minX_BEARER_TOKEN required
RssAdapterCompany blogs, TechCrunch AI, The Verge AI, Simon WillisonP12h (default)None
Register Your Adapter
  1. 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 ];

  1. Write a test in packages/agent/src/sources/__tests__/ following existing patterns.
  1. 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.6
  • vertical (Choice) — one of the 21 Vertical values, or none
  • event_type (Choice) — launch | funding | release | acquisition | paper | update | shutdown | other
  • significance (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
ToolWhat it does
search_newsFull-text search (phrases, OR, -exclude), filterable by vertical / event_type / source / since
get_latest_newsNewest items first, same filters, cursor-paginated via next_cursor
get_feed_statsTotal 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

  1. Fork the repo and create a branch: feat/my-feature, fix/some-bug, or chore/cleanup
  2. Write conventional commit messages: feat: add devto adapter, fix: handle empty RSS feed
  3. Run checks before opening a PR:
pnpm test          # run all tests

pnpm lint # eslint pnpm typecheck # tsc --noEmit

  1. Keep PRs focused — one adapter or feature per PR.

Environment Variables

VariableRequiredDefaultDescription
TYPESAFE_API_KEYYes—TypeSafe API key for Jev (System One) enrichment and chat classification
POSTGRES_HOSTNolocalhostPostgreSQL host
POSTGRES_PORTNo5432PostgreSQL port
POSTGRES_DBNonexusPostgreSQL database name
POSTGRES_USERNonexusPostgreSQL user
POSTGRES_PASSWORDYes—PostgreSQL password
X_BEARER_TOKENNo—X/Twitter API bearer token (enables Twitter adapter)
GITHUB_TOKENNo—GitHub PAT (raises rate limits for GitHub adapter)
API_KEYNo—API key for write/admin endpoints
API_PORTNo3001API server port
API_HOSTNo0.0.0.0API server bind address
CLIENT_PORTNo5173Client 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

PopNx에게 묻기