mcpField
N
Nexus AI News

Nexus AI News

远程服务
nexus.carapace.bot搜索与检索23 周前更新

关于 Nexus AI News

Nexus AI News 汇集多个来源的 AI 行业资讯,去重后按领域和事件类型分类。其 MCP 信息流支持抽取式搜索与浏览,请求处理路径中不使用生成式模型。

主要功能

  1. 01采集 arXiv、Hacker News、GitHub、X 和 RSS 资讯
  2. 02跨来源去重
  3. 03分类标注相关性、领域、事件类型和重要性
  4. 04搜索并浏览按时间倒序排列的信息流
  5. 05按领域、事件类型、来源和日期筛选

适用场景

  1. 01查找特定领域的近期 AI 资讯
  2. 02浏览发布、融资、论文或收购消息
  3. 03使用短语和排除词搜索资讯
  4. 04查看各领域或事件类型的信息流数量

MCP 相关

公开只读 MCP 服务通过 Streamable HTTP 提供,地址为 https://nexus.carapace.bot/mcp。它提供 search_news、get_latest_news 和 get_feed_stats;结果为抽取式内容,不调用模型。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://nexus.carapace.bot/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

3
参数类型必填说明
limitinteger否返回的最大条目数(默认值为 20)。
querystring是搜索词,例如 'open-weight reasoning model'。
sincestring否ISO 8601 日期或时间戳;仅包含在此时间或之后发布的项目。
sourcestring否限制为单个来源,例如 'arxiv'、'hackernews'、'github'。
verticalenum否限制为单个 AI 垂直领域。foundation_models | inference | training | agents | code_generation | multimodal | safety_alignment | evaluation | developer_tooling | enterprise_platforms | data_infrastructure | open_source | hardware | consumer_products | creative_tools | search_retrieval | robotics | healthcare | finance | research | governance_policy
event_typeenum否限制为一种赛事类型。launch | funding | release | acquisition | paper | update | shutdown

详细介绍

Nexus

由 Jev 驱动的 AI 新闻动态。

TypeScript PostgreSQL License Docker

Nexus 从多个来源采集 AI 新闻,对内容去重,通过一次 Jev(TypeSafe System One)调用对每条内容进行分类,并以按时间倒序排列的动态流形式提供结果,支持筛选和带防护的抽取式聊天搜索。没有图数据库,请求处理路径中也没有生成式大模型。

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

快速开始

# 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

客户端将在 http://localhost:5173 打开,API 服务于 http://localhost:3001。

Monorepo 目录结构

PackagePathDescription
@nexus/sharedpackages/sharedTypeScript 接口、枚举、常量、验证——供所有包导入
@nexus/agentpackages/agent来源适配器 + 去重 + Jev 增强
@nexus/apipackages/api为动态流和聊天搜索提供服务的 Fastify REST 服务
@nexus/clientpackages/clientReact 动态流界面(Vite)

添加来源适配器

主要的贡献方式是添加新的数据来源。每个适配器都会将原始内容送入去重 + Jev 增强流水线,由该流水线自动进行分类并插入动态流。

RawItem 接口
// 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<string, unknown>; // source-specific fields
}
编写适配器

扩展 BaseAdapter 并实现 fetchItems()。适配器自带速率限制、带退避的指数重试和基于 URL 的去重。

// 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<RawItem[]> {
    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 },
      }))
    );
  }
}
现有适配器
AdapterSourcePriorityPoll IntervalAuth
ArxivAdapterarXiv RSS (cs.AI, cs.CL, cs.LG)P030 min无
HackerNewsAdapterHN Algolia APIP015 min无
GitHubTrendingAdapterGitHub Search APIP060 min可选 GITHUB_TOKEN
TwitterAdapterX/Twitter API v2P115 min必需的 X_BEARER_TOKEN
RssAdapter公司博客、TechCrunch AI、The Verge AI、Simon WillisonP12h (default)无
注册适配器
  1. 将适配器添加到 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. 按照现有模式,在 packages/agent/src/sources/__tests__/ 中编写测试。

  2. 运行测试:pnpm --filter @nexus/agent test

Jev 增强

每个去重后的 RawItem 都会恰好调用一次 TypeSafe 的 System One API(POST https://api.typesafe.ai/v1/systemone,模型 jev-latest,Bearer TYPESAFE_API_KEY)。Jev 是一种决策模型——它会针对结构化 JSON 回答类型化问题(Noul、Choice、Score),而非生成文本。一次调用即可回答一条内容的全部四个问题:

  • is_ai_relevant(Noul)——置信度 < 0.6 时丢弃
  • vertical(Choice)——21 个 Vertical 值之一,或 none
  • event_type(Choice)——launch | funding | release | acquisition | paper | update | shutdown | other
  • significance(Score)——5 分制评分规则,映射到 0.2–1.0

动态流中显示的摘录是来源内容的前 280 个字符——绝不是大模型摘要,因此不会产生幻觉。

聊天搜索

POST /api/chat 是一个带防护的抽取式搜索框,不是聊天机器人。它通过一次 Jev 调用对查询进行分类(主题相关性检查、垂直领域/事件类型/时间范围提取),然后通过 Postgres 三元组搜索返回 feed_items 中的真实行。聊天处理路径中完全没有生成式模型——因此没有可供提示词注入攻击交互的对象。

MCP 服务

该信息流通过 Streamable HTTP 作为公开的只读 Model Context Protocol 服务提供给 Agent:

https://nexus.carapace.bot/mcp
工具功能
search_news全文搜索(短语、OR、-exclude),可按 vertical / event_type / source / since 筛选
get_latest_news优先显示最新条目,支持相同的筛选条件,并通过 next_cursor 进行游标分页
get_feed_stats总数以及按 vertical 和 event_type 分类的数量

使用 claude mcp add --transport http nexus https://nexus.carapace.bot/mcp 将其添加到 Claude Code。无状态(无会话),仅提取信息——与 GET /api/feed 使用相同的验证,不调用模型。注册清单:server.json。

数据模型

feed_items

id(uuid)· title · url(唯一)· source · published_at · excerpt · vertical · event_type · significance(0.0–1.0)· created_at

垂直类别

21 个空间聚类类别,定义于 packages/shared/src/types.ts(例如 foundation_models、agents、safety_alignment、consumer_products 等)。

事件类型

launch | funding | release | acquisition | paper | update | shutdown | other

贡献

  1. Fork 仓库并创建分支:feat/my-feature、fix/some-bug 或 chore/cleanup
  2. 编写符合 Conventional Commits 规范的提交信息:feat: add devto adapter、fix: handle empty RSS feed
  3. 创建 PR 前运行检查:
pnpm test          # run all tests
pnpm lint          # eslint
pnpm typecheck     # tsc --noEmit
  1. 保持 PR 聚焦——每个 PR 只包含一个适配器或功能。

环境变量

变量必填默认值描述
TYPESAFE_API_KEY是—Jev(System One)增强和聊天分类所需的 TypeSafe API 密钥
POSTGRES_HOST否localhostPostgreSQL 主机
POSTGRES_PORT否5432PostgreSQL 端口
POSTGRES_DB否nexusPostgreSQL 数据库名称
POSTGRES_USER否nexusPostgreSQL 用户
POSTGRES_PASSWORD是—PostgreSQL 密码
X_BEARER_TOKEN否—X/Twitter API bearer 令牌(启用 Twitter 适配器)
GITHUB_TOKEN否—GitHub PAT(提高 GitHub 适配器的速率限制)
API_KEY否—写入/管理端点所需的 API 密钥
API_PORT否3001API 服务端口
API_HOST否0.0.0.0API 服务绑定地址
CLIENT_PORT否5173客户端开发服务端口

技术栈

  • 数据库 — PostgreSQL 16(raw_items、feed_items、pg_trgm 搜索)
  • API — Fastify
  • 客户端 — Vite + React
  • 搜索 — Fuse.js(客户端,已加载条目)、pg_trgm(服务端,聊天和信息流搜索)
  • Agent — TypeSafe Jev(System One),用于增强和聊天分类
  • 部署 — Railway(Postgres + API)+ Vercel(客户端)

成本

增强每个新去重条目大约需要调用 Jev 1 次,所有来源每天约有 50–100 个条目;每次聊天查询还需要调用 Jev 1 次。整个处理流程中没有 Neo4j、Redis,也没有生成式大模型——这就是全部计算开销。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。