RSS阅读器MCP服务器

NetNewsWire MCP Server 是一个只读的模型上下文协议服务,为 AI 助手提供 NetNewsWire 本地 RSS 订阅、文章、星标内容与全文搜索的读取能力,适用于通过 Claude Code 等 MCP 客户端访问个人阅读数据的场景。

  • by jonathanspiva
  • Swift
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 jonathanspiva/swift-netnewswire-mcp

使用说明

NetNewsWire MCP Server

A read-only Model Context Protocol (MCP) server for NetNewsWire, the open-source RSS reader for Mac.

Gives AI assistants like Claude access to your NetNewsWire feeds, articles, and search index.

Tools

Tool Description
list_accounts List available NNW accounts (OnMyMac, iCloud, etc.)
list_feeds List subscribed feeds (parsed from OPML)
list_starred_articles Starred articles with optional feed filter and limit
list_recent_articles Recent articles by arrival date
get_article Full article content by ID; optional format (html/text) and max_content_length to bound the body
search_articles Full-text search using NNW's FTS4 index
get_article_count Total, starred, and unread counts

All tools are read-only. Nothing is modified. Each tool returns machine-readable structuredContent (with a declared outputSchema) alongside the human-readable markdown.

Results are sized to fit comfortably in Claude Code's default tool-output limit: list tools return at most 100 articles (default 50), and get_article returns at most 30,000 characters of body (default 20,000).

If NetNewsWire wrote to the account database in the last minute (an iCloud sync or feed refresh may still be running), the list, search, and count tools add a note to the markdown and a sync_warning field to the structured output, since the results may be missing rows that are still arriving.

Privacy

Your NetNewsWire databases hold your private reading history: subscriptions, articles, and what you've starred and read. This server runs locally and never makes network requests itself, but everything a tool returns is passed to the MCP client you connect it to, and from there to that client's AI model. Only connect it to clients you trust with that data.

Requirements

  • macOS 26+
  • Swift 6.4+ (Xcode 27, or the swift.org 6.4 toolchain on macOS 26)
  • NetNewsWire (Mac App Store or direct download); tested against 7.1.4 (schema unchanged since 7.1.1)

Build

swift build -c release

The binary will be at .build/release/netnewswire-mcp.

Test

swift test                          # no NetNewsWire install needed
swift test --enable-code-coverage   # ~98% line coverage

Tests run against a fixture database that mirrors NetNewsWire's schema, and drive the real server over the MCP SDK's in-memory transport (initialize handshake, tool listing, and a check that every tool's structuredContent matches its declared outputSchema). If NetNewsWire is installed and the terminal has Full Disk Access, one extra test validates the queries against your live database.

Configure

Claude Code

Install it as a plugin. This repo is its own plugin marketplace:

claude plugin marketplace add jonathanspiva/swift-netnewswire-mcp
claude plugin install netnewswire@netnewswire-mcp

No Swift toolchain is needed. On first launch the plugin downloads the universal binary from the matching GitHub release, checks it against a SHA-256 pinned in plugin/launch.sh, and caches it in the plugin's data directory (~/.claude/plugins/data/). Its tools appear as mcp__plugin_netnewswire_netnewswire__*. If you previously added the server with claude mcp add, remove that one (claude mcp remove netnewswire) so the tools aren't listed twice.

To use a local build instead, add the binary directly. --scope user makes it available in every project:

claude mcp add --scope user netnewswire -- /path/to/.build/release/netnewswire-mcp

Run claude mcp list to confirm it connects, or /mcp inside a session.

Claude desktop app

Build a Desktop Extension (.mcpb, needs Node for npx) and double-click it, or install it from Settings → Extensions → Advanced settings → Install Extension:

./scripts/build-mcpb.sh   # writes .build/netnewswire-mcp.mcpb

The bundle is built locally and unsigned. Alternatively, add the binary by hand to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "netnewswire": {
      "command": "/path/to/.build/release/netnewswire-mcp"
    }
  }
}

Full Disk Access

NetNewsWire keeps its databases inside a macOS app container, which the system protects with privacy controls (TCC). The server can only read it if the process that launches it has Full Disk Access. Without it the server still starts, but every tool call returns an error explaining how to grant access.

Grant FDA to whichever app hosts your MCP client, then restart that app:

  • Running Claude Code from a terminal → System Settings → Privacy & Security → Full Disk Access → enable Terminal (or iTerm).
  • The Claude desktop app → enable Claude.
  • Another host (e.g. VS Code) → grant FDA to that app instead.

How it works

The server reads NetNewsWire's SQLite databases directly (read-only mode) from:

~/Library/Containers/com.ranchero.NetNewsWire-Evergreen/Data/Library/Application Support/NetNewsWire/Accounts/

It auto-discovers all accounts and their databases on startup. Feed lists are parsed from each account's Subscriptions.opml file. Full-text search uses NNW's built-in FTS4 search index.

Dependencies

  • swift-sdk 0.12.1+ - MCP protocol implementation for Swift (supports spec 2025-11-25)
  • GRDB.swift 7.11+ - SQLite toolkit for Swift

Notes

  • Only tested with Claude Code. It should work with any MCP client, but your mileage may vary.
  • This depends on NetNewsWire's internal database schema, which is not a public API and could change between versions. NetNewsWire 7.1 moved authors into an inline JSON column on articles (the old authors/authorsLookup tables are gone); this server reads the current layout.
  • Feed IDs are the XML URLs of the feeds, not UUIDs.
  • Dates are Unix timestamps (seconds since 1970).

Contributing

See CONTRIBUTING.md. Please report security issues privately, as described in SECURITY.md.

License

MIT