mcpField
N
Nexus AI News

Nexus AI News

リモート
nexus.carapace.bot検索23 週間前に更新
リポジトリ公式サイト

Nexus AI News について

Nexus AI Newsは複数の情報源からAI業界ニュースを集約し、重複を除いて分野やイベント種別で分類します。MCPフィードでは、リクエスト処理中に生成モデルを使わず、抽出型の検索と閲覧ができます。

主な機能

  1. 01arXiv、Hacker News、GitHub、X、RSSからニュースを収集
  2. 02情報源をまたいだ重複排除
  3. 03関連性、分野、イベント種別、重要度の分類
  4. 04新着順フィードの検索と閲覧
  5. 05分野、イベント種別、情報源、日付による絞り込み

活用シーン

  1. 01特定分野の最近のAIニュースを探す
  2. 02発表、資金調達、論文、買収のニュースを閲覧
  3. 03フレーズや除外語を使ったニュース検索
  4. 04分野別またはイベント種別のフィード件数を確認

MCP 対応

公開の読み取り専用MCPサーバーで、https://nexus.carapace.bot/mcp からStreamable HTTP経由で利用できます。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いいえ1つのイベントタイプに限定します。launch | funding | release | acquisition | paper | update | shutdown

詳細

Nexus

Jevを活用したAIニュースフィードです。

TypeScript PostgreSQL License Docker

Nexusは、複数のソースからAIニュースを取り込み、重複を排除し、単一のJev(TypeSafe System One)への呼び出しで各項目を分類し、フィルターと、保護された抽出的なチャット検索機能を備えた新しい順のフィードとして提供します。グラフデータベースはなく、リクエスト処理経路に生成型LLMもありません。

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で利用できます。

モノレポの構成

パッケージパス説明
@nexus/sharedpackages/sharedTypeScriptのインターフェース、列挙型、定数、バリデーション — すべてのパッケージからインポートされます
@nexus/agentpackages/agentソースアダプター+重複排除+Jevによるエンリッチメント
@nexus/apipackages/apiフィードとチャット検索用のFastify RESTサーバー
@nexus/clientpackages/clientReact製フィードUI(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 },
      }))
    );
  }
}
既存のアダプター
アダプターソース優先度ポーリング間隔認証
ArxivAdapterarXiv RSS(cs.AI、cs.CL、cs.LG)P030分なし
HackerNewsAdapterHN Algolia APIP015分なし
GitHubTrendingAdapterGitHub Search APIP060分GITHUB_TOKENは任意
TwitterAdapterX/Twitter API v2P115分X_BEARER_TOKENが必要
RssAdapter企業ブログ、TechCrunch AI、The Verge AI、Simon WillisonP12時間(デフォルト)なし
アダプターの登録
  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)を必ず1回だけ呼び出します。Jevは意思決定モデルです。構造化JSONに対して型付きの質問(Noul、Choice、Score)に回答し、テキストは生成しません。1回の呼び出しで、各項目について4つの質問すべてに回答します。

  • 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文字です。LLMによる要約ではないため、幻覚が生じることはありません。

チャット検索

POST /api/chatは、保護された抽出的な検索ボックスであり、チャットボットではありません。1回のJev呼び出しでクエリを分類(対象トピックの確認、vertical/event type/期間の抽出)し、その後、Postgresのトライグラム検索を通じてfeed_itemsから実際の行を返します。チャットの処理経路に生成モデルは一切ないため、プロンプトインジェクションが作用する相手もありません。

MCP サーバー

このフィードは、Streamable HTTP を介したパブリックな読み取り専用の Model Context Protocol サーバーとして、エージェントに公開されています。

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 (unique) · 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. リポジトリをフォークして、ブランチを作成します:feat/my-feature、fix/some-bug、または chore/cleanup
  2. Conventional Commit 形式のコミットメッセージを記述します: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 の範囲を絞り、1 つの PR につきアダプターまたは機能を 1 つにします。

環境変数

変数必須デフォルト説明
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 のベアラートークン(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(サーバー側、チャットとフィードの検索)
  • エージェント — エンリッチメントとチャット分類に TypeSafe Jev(System One)を使用
  • デプロイ — Railway(Postgres + API)+ Vercel(クライアント)

コスト

エンリッチメントでは、新たに重複排除されたアイテムごとに Jev を約 1 回呼び出します。全ソースを合わせて 1 日あたり約 50~100 件で、さらにチャットクエリごとに Jev を 1 回呼び出します。パイプライン全体を通じて Neo4j も Redis も生成系 LLM も使用しません。計算コストはこれだけです。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。