FeedKit

io.github.ArkNillPublished by GitHub account ArkNillv0.1.0Updated Oct 24, 2026

RSS/Atom feed collection with 417 curated feeds. Python MCP server.

Overview

AI-generated overview

Lets an assistant search a curated RSS/Atom feed catalog, subscribe to feeds, collect articles into a local SQLite store, and full-text search them.

What you can do
FeedKit exposes nine MCP tools over stdio. The assistant can search a built-in catalog of 444 curated feeds by query, category, or language, fetch entries from any RSS/Atom URL without subscribing, and subscribe or unsubscribe feeds. It can collect new articles from subscriptions in parallel, list subscriptions with fetch and error counts, and run SQLite FTS5 full-text search or retrieve the latest collected articles.
When to use it
Useful when an assistant needs ongoing news, research, or blog monitoring from RSS sources rather than one-off web searches, for example tracking arXiv papers, technology blogs, or finance and news feeds. It fits workflows where articles should be stored locally and searched repeatedly.
Requirements
Runs locally as a stdio process; install the PyPI package feedkit with the mcp extra and start feedkit-mcp. Requires Python 3.11 or newer. No accounts, API keys, or environment variables are declared. Network access is needed to fetch feeds; data is stored in a local SQLite database under the user's home directory.
Before you install
The server writes to a local SQLite database and can add or remove subscriptions and their collected articles, so unsubscribe deletes stored data. It fetches external feed URLs on the user's behalf, which contacts third-party sites. No credentials are requested, but feed content is retrieved from external sources.

Installation

In SourceWeft

  1. Open FeedKit in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

FeedKit

[PyPI] [Python] [License] [Tests]

한국어 문서 · llms.txt

RSS/Atom feed collection with 444 curated, verified feeds. CLI + Python API + MCP server.

Quick Start

bash
pip install feedkit
feedkit search cloudflare           # search the built-in catalogfeedkit subscribe-catalog -c technology   # subscribe to all 68 tech feedsfeedkit collect                     # fetch all subscriptions (async parallel)feedkit find "kubernetes"           # full-text search collected articles

Install

bash
pip install feedkit             # core (CLI + Python API)pip install "feedkit[mcp]"      # + MCP serverpip install "feedkit[all]"      # + MCP + OPML import/export

Requirements: Python 3.11+

How It Works

mermaid
flowchart LR    A["📋 Catalog\n444 curated feeds"] --> B["Subscribe\nselect feeds"]    B --> C["🔄 Collect\nfetch new entries"]    C --> D["📦 Store\nSQLite database"]    D --> E["🔍 Query\nfilter & retrieve"]

CLI Reference

Catalog Commands

feedkit search [QUERY]

Search the built-in catalog of 444 curated feeds.

bash
feedkit search aws                    # search by title or domainfeedkit search --category science     # filter by categoryfeedkit search --language ko          # filter by languagefeedkit search -c finance -l en -n 50 # combine filtersfeedkit search -j                     # JSON output (for piping)
OptionShortDefaultDescription
--category-cFilter by category
--language-lFilter by language code (en, ko, ja, zh)
--limit-n20Max results
--json-output-jOutput as JSON
feedkit categories

List all available catalog categories.

$ feedkit categories  academia  finance  pets  science  society  technology
feedkit stats

Show catalog and local subscription statistics.

$ feedkit statsCatalog: 444 feeds  academia: 13  finance: 89  pets: 27  science: 128  society: 119  technology: 68
Local: 68 subscriptions, 1,247 articles

Subscription Commands

feedkit subscribe <URL>

Subscribe to a single feed.

bash
feedkit subscribe https://blog.cloudflare.com/rss/feedkit subscribe https://example.com/rss -c tech -t "My Feed"
OptionShortDescription
--category-cCategory label
--title-tDisplay title override
feedkit subscribe-catalog -c <CATEGORY>

Subscribe to all feeds in a catalog category at once.

bash
feedkit subscribe-catalog -c technology   # subscribe to all 68 tech feedsfeedkit subscribe-catalog -c science      # subscribe to all 128 science feeds
feedkit unsubscribe <URL>

Remove a feed subscription and its collected articles.

feedkit list

List all current subscriptions with fetch counts and error counts.

Collection Commands

feedkit collect

Fetch new articles from all subscribed feeds (async parallel).

bash
feedkit collect                    # collect allfeedkit collect -c technology      # collect only tech feedsfeedkit collect -n 50              # max 50 concurrent requests
OptionShortDefaultDescription
--category-cOnly collect from this category
--concurrency-n20Max concurrent HTTP requests

Output:

Collecting from 68 feeds... 67/68 feeds OK, 412 new articles, 8234ms
feedkit latest

Show most recently collected articles.

bash
feedkit latest                # latest 20 articlesfeedkit latest -n 50          # latest 50feedkit latest -c finance     # latest from finance only
feedkit find <QUERY>

Full-text search (SQLite FTS5) across all collected articles.

bash
feedkit find "kubernetes deployment"feedkit find "large language model" -n 50

OPML Commands

feedkit import-opml <PATH>

Import feeds from an OPML file (Feedly, Inoreader, NetNewsWire, etc.).

bash
feedkit import-opml subscriptions.opml
feedkit export-opml <PATH>

Export current subscriptions to OPML.

bash
feedkit export-opml backup.opml

Python API

python
from feedkit import search_catalog, fetch_feed, get_catalog_stats, FeedStorefrom feedkit.core import collect
# Search the built-in catalogfeeds = search_catalog("cloudflare")feeds = search_catalog(category="technology", language="en", limit=50)
# Fetch a single feed (async)entries = await fetch_feed("https://blog.cloudflare.com/rss/")for entry in entries:    print(entry.title, entry.url, entry.published)
# Subscribe and collectstore = FeedStore()                              # SQLite at ~/.feedkit/feedkit.dbstore.subscribe("https://blog.cloudflare.com/rss/", category="tech")result = await collect(store, concurrency=20)    # async parallel fetchprint(f"{result.new_articles} new, {result.feeds_ok}/{result.feeds_total} OK")
# Search collected articles (FTS5)articles = store.search("kubernetes", count=10)
# Latest articlesarticles = store.get_latest(count=20, category="tech")
# Feed healthhealth = store.get_health()                      # fetch/error counts per feed
# Catalog statsstats = get_catalog_stats()                      # {total_feeds, categories, languages}
store.close()

Key Classes

ClassDescription
FeedStoreSQLite-backed subscription + article store (~/.feedkit/feedkit.db)
FeedEntrySingle entry from a fetched feed (title, url, summary, published, author)
CollectResultBulk collection result (feeds_ok, feeds_error, new_articles, duration_ms)
CatalogFeedEntry from the built-in catalog (url, title, category, subcategory, language, domain)

MCP Server

bash
pip install "feedkit[mcp]"feedkit-mcp                    # starts stdio MCP server

Configuration

Claude Code (~/.claude/settings.json):

json
{  "mcpServers": {    "feedkit": {      "command": "feedkit-mcp"    }  }}

Tools Reference

#ToolParametersDescription
1fetch_single_feedurl, count=10Fetch entries from any RSS/Atom URL (no subscription needed)
2search_feed_catalogquery, category, language, count=20Search the built-in 444-feed catalog
3catalog_statsGet catalog statistics (total, by category, by language)
4subscribe_feedurl, title, categorySubscribe to a feed for ongoing collection
5unsubscribe_feedurlRemove a subscription
6list_subscriptionsList all subscriptions with status
7collect_feedscategoryCollect new articles from all subscriptions
8search_articlesquery, count=10Full-text search across collected articles
9get_latest_articlescategory, count=20Get most recently collected articles

MCP Workflow Example

User: "What are the latest AI papers on arXiv?"
1. search_feed_catalog(query="arxiv", category="science")   → finds arXiv cs.AI, cs.LG, cs.CL feeds
2. subscribe_feed(url="https://rss.arxiv.org/rss/cs.AI")
3. collect_feeds(category="science")   → fetches new entries
4. get_latest_articles(category="science", count=10)   → returns latest papers

Built-in Catalog

444 verified feeds across 6 categories. All audited — hard paywalls (Bloomberg, FT, WSJ) and broken URLs removed.

CategoryFeedsSubcategoriesHighlights
technology68ai_ml, developer, it_news, security, startup, ...AWS, Cloudflare, Stripe, Netflix, HN, Go Blog, Rust Blog
science128journal, preprint, news, governmentNature, Science, arXiv, bioRxiv, medRxiv, NASA, PLOS
society119news_us, news_ko, news_uk, news_intl, factcheck, ...BBC, NPR, NYT, NHK, JTBC, PolitiFact, Snopes
finance89markets, central_bank, regulatory, cryptoFed, BOE, BOJ, SEC, CNBC, CoinDesk, Yahoo Finance
pets27veterinary, community, blog, healthAKC, PetMD, ASPCA, dvm360, r/dogs, r/cats
academia13ai_ml, research, institutionGoogle AI, DeepMind, Stanford HAI, Hugging Face

Languages: English (381), Korean (47), Japanese (14), Chinese (2)

Full feed list: CATALOG.md

Why FeedKit?

awesome-rss-feeds (2.1K★)engineering-blogs (37.5K★)FeedKit
TypeMarkdown listMarkdown listPython package
Feeds~500~600444
ScopeGeneralTech blogs onlyTech + Science + Finance + News + Factcheck
Last update2021 (stale)2022 (stale)Active (daily collection)
Verified workingNoNoYes (778K+ articles collected)
Legal auditNoNoYes (paywall/ToS feeds removed)
CLINoNoYes (12 commands)
Programmatic APINoNoYes (async Python)
MCP serverNoNoYes (9 tools)
OPMLNoNoYes (import/export)
FTS searchNoNoYes (SQLite FTS5)

Disclaimer

This package distributes a catalog of publicly available RSS feed URLs, not the feed content itself. RSS is a syndication standard — publishing an RSS feed is an explicit invitation for readers to subscribe. FeedKit fetches feeds on the user's behalf and does not store or redistribute copyrighted content.

Feeds behind hard paywalls (Bloomberg, FT, WSJ, Barron's) and feeds with aggressive terms of service have been removed from the catalog.

Used in

  • newswatch — RSS news monitoring pipeline (feedkit → markgrab → embgrep → diffgrab)

License

MIT


Part of the QuartzUnit ecosystem — composable Python libraries for data collection, extraction, search, and AI agent safety.

Source: README.md at commit e33e47e

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts