newsroom-mcp
Uses the Algolia Search API to fetch Hacker News items for ingestion into the news curation pipeline.
Ingests AI-related content from Hugging Face's RSS/Atom feed for curation into stories.
Ingests AI-related content from OpenAI's RSS/Atom feed for curation into stories.
Ingests AI-related content from RSS/Atom feeds and makes it available for the news curation and ranking workflow.
Ingests AI-related content from TechCrunch AI's RSS/Atom feed for curation into stories.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@newsroom-mcpfetch the latest AI news and show me today's top stories"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
newsroom-mcp
A private AI news curation MCP server. It ingests AI-related content from RSS/Atom feeds and Hacker News, and exposes MCP tools that let an AI agent cluster that content into curated "stories" and read back a ranked feed — without the server itself making any relevance, clustering, summarization, or ranking decisions. See IDEA.md for the original design spec.
Quick start
npm install
cp .env.example .env # optional — sensible defaults exist without one
npm run dev # serves http://localhost:3000/mcp + the InspectorTwo ways to run the server — pick whichever fits your client:
HTTP (default) —
npm run dev/npm run start. Point a client athttp://localhost:3000/mcp. Requires the server to stay running.stdio —
npm run start:stdio(or configure your MCP client to runnpx tsx stdio.tsdirectly). The client spawns the process itself, so nothing needs to be kept running in the background. Both entrypoints share the same tool registrations (src/composition.ts) and the same SQLite database.
Related MCP server: gnews-agent
Connecting an MCP client
HTTP
Requires npm run dev (or npm run start) already running on port 3000.
claude mcp add (creates/updates .mcp.json):
claude mcp add --transport http newsroom-mcp http://localhost:3000/mcpEquivalent .mcp.json:
{
"mcpServers": {
"newsroom-mcp": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}stdio
No server needs to be running — Claude spawns the process itself and kills it when the session ends.
claude mcp add:
claude mcp add newsroom-mcp -- npx tsx /absolute/path/to/newsroom-mcp/stdio.tsEquivalent .mcp.json:
{
"mcpServers": {
"newsroom-mcp": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/newsroom-mcp/stdio.ts"]
}
}
}stdio.ts resolves its working directory relative to itself, so the command
works from anywhere — but npx tsx still needs to run with this repo's
node_modules in scope, hence the absolute path rather than a relative one.
MCP Tools
Tool | Purpose |
| Poll every configured provider, store new items, and archive stories stale 30+ days. |
| List content awaiting AI triage (items older than 1 week are excluded). |
| List active stories as clustering candidates. |
| Create a story from one or more content items. |
| Attach an item to an existing story. |
| Update a story's AI-maintained summary/scores. |
| Finalize an irrelevant item so it's never reconsidered. |
| Retrieve the curated feed as stories, hiding anything stale 7+ days and decaying the rest by recency. |
| Report the weekly podcast digest's status (current ISO week, whether an episode exists/is due, recent episode metadata). |
| Submit this week's podcast episode script (one per ISO week, immutable once submitted). |
Full details, including the contribution freshness rule, in
docs/mcp-tools.md.
Content sources
RSS/Atom — curated AI-news feeds (OpenAI, DeepMind, Hugging Face, TechCrunch AI, VentureBeat AI, MIT AI, Anthropic, xAI, and more); see
src/config/providers.ts.Hacker News — via the Algolia search API, query configurable via
NEWSROOM_HN_QUERY.
More on each provider's incremental-fetch strategy in docs/providers.md.
Feed site
The curated feed is also published as a standalone read-only site (GitHub
Pages, served from the feed branch), a Vite React app (site/) sharing
its story-card UI with the in-app get-feed MCP View via views/_shared/feed/.
npm run build:site builds it; .github/workflows/deploy-feed-site.yml
deploys it to the feed branch's GitHub Pages root on every main push
touching site/**/views/_shared/**. The feed.json data it reads is
published separately by npm run publish-feed after a curation run. The
same site also renders the weekly podcast digest (views/_shared/podcast/),
reading podcast.json — see below.
Weekly podcast digest
A weekly, AI-narrated audio companion to the feed, published in two phases (full detail in docs/mcp-tools.md):
Phase 1 — the curating agent authors and submits a script via the
submit-podcast-episodeMCP tool during a normal run;npm run publish-podcastpublishes it ontopodcast.json(merge-only) right afternpm run publish-feed.Phase 2 —
.github/workflows/synthesize-podcast.yml(Friday-morning cron + manualworkflow_dispatch) mechanically turns any pending script into real audio via the OpenAI TTS API, and commits the mp3 onto thefeedbranch ataudio/<episode-id>.mp3alongside the updatedpodcast.json. Runnable locally asnpm run synthesize-podcast(readsOPENAI_API_KEYfrom the environment — see.env.example); never part ofnpm run dev/start.
Development
npm run lint # ESLint
npm run test # Vitest: unit + protocol tests, no network
NEWSROOM_LIVE_TESTS=1 npm run test:live # opt-in live sanity tests against real APIs
npm run typecheck # mcp-use typecheck
npm run verify # lint + test + typecheck
npm run build # build with mcp-useTesting strategy explained in docs/testing.md. Architecture and layering in docs/architecture.md. SQLite schema in docs/sqlite-schema.md.
Environment variables
See .env.example for the full list (NEWSROOM_DB_PATH,
NEWSROOM_LOG_LEVEL, NEWSROOM_HN_QUERY, NEWSROOM_FETCH_TIMEOUT_MS,
NEWSROOM_LIVE_TESTS). None are required — every var has a working default.
Project layout
src/domain/ plain interfaces/types, no logic
src/providers/ one ContentProvider per source + the registry
src/repositories/ persistence interfaces (no SQL)
src/sqlite/ node:sqlite-backed repositories + migrations
src/services/ business rules (IngestionService, StoryService, FeedService)
src/tools/ MCP tool registration, Zod schemas, serialization
src/config.ts env var loading
src/config/providers.ts curated provider list
test/unit/ fast, no-network tests
test/mcp-server.test.ts protocol-level test against the real server
test/live/ opt-in live sanity tests
docs/ architecture, providers, schema, tools, testing guides
views/_shared/feed/ story-card UI shared by the MCP View and the standalone site
site/ standalone Vite React feed site (fed by published feed.json)This server cannot be deployed
Maintenance
Related MCP Connectors
Your curated sources (RSS, YouTube, podcasts, Google News) as context for any AI agent. 26 tools.
The only News based AI MCP your agents will ever need — custom categories, global regions, and time-scoped results in one tool. We use multi-vector & sparse-hybrid search to search through thousands of articles across the world to find the exact news you're looking for.
Intelligence subscription protocol for AI agents. Scored, filtered AI intelligence signals via MCP.
Agent-first tech news: ranked story clusters, coverage and discussion links, trends, and events.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides access to curated AI news feeds and the ability to fetch and normalize any RSS/Atom/RDF feed, enabling AI agents to consume up-to-date content.6 npmMIT
- AlicenseNot gradedqualityDmaintenanceA persistent news intelligence MCP server that enables AI agents to fetch, store, deduplicate, embed, and semantically query news from Google News across 141 countries and 41 languages.8MIT
- FlicenseNot gradedqualityDmaintenanceLocal MCP server that ingests and normalizes recent AI, tech, and research news from multiple sources, exposing tools for media agents to query and retrieve article content on demand.-
- AlicenseNot gradedqualityBmaintenanceMCP server that aggregates AI news, academic papers from ArXiv, and trending GitHub repositories from multiple sources, enabling users to fetch, search, and filter recent AI content via natural language.1MIT