Knuckles-Team

FreshRSS

Community Knuckles-Team
Updated

FreshRSS API + MCP Server + A2A Server — curated, relevance-gated RSS world-model intake for the Knowledge Graph

FreshRSS

CLI or API | MCP | Agent

PyPI - VersionMCP ServerPyPI - DownloadsGitHub Repo starsPyPI - LicenseGitHub last commit (by committer)

Version: 0.1.0

Documentation — Installation, deployment, usage across the API, CLI, and MCPinterfaces, the integrated A2A agent server, and guidance for provisioning thebacking platform are maintained in theofficial documentation.

Table of Contents

  • Overview
  • Key Features
  • MCP
    • Available MCP Tools
    • Environment Variables
    • Transport Configuration Examples
    • Additional Deployment Options
  • Usage
  • Installation
  • Documentation

Overview

FreshRSS MCP Server + A2A Agent

A connector for the self-hosted FreshRSS RSS reader,wrapping its Google Reader compatible API (GReader). It exposes twoaction-routed MCP tool domains:

  • freshrss_reader — stream_contents (feed items + continuation), item_contents, unread_count.
  • freshrss_subscriptions — list, subscribe, unsubscribe, label, categories, mark_read, star.

This repository is actively maintained - Contributions are welcome!

Key Features

  • Consolidated Action-Routed MCP Tools: Two togglable tool domains group everyGReader operation, minimizing token overhead and tool bloat in LLM contexts.
  • Google Reader Compatible: Wraps the FreshRSS GReader API — ClientLogin auth,transparent re-authentication on 401, and automatic write-token handling.
  • Enterprise-Grade Security: OIDC token delegation (RFC 8693), Eunomia policyenforcement, and per-instance credential resolution.
  • Integrated A2A Agent: Built-in Pydantic AI agent server alongside the MCP server.
  • Native Telemetry & Tracing: Out-of-the-box OpenTelemetry exports and Langfuse tracing.

MCP

Install the slim [mcp] extra. All MCP examples below installfreshrss-agent[mcp] — the MCP-server extra that pulls only the FastMCP /FastAPI tooling (agent-utilities[mcp]). It deliberately excludes the heavyagent runtime (the epistemic-graph engine, pydantic-ai, dspy, llama-index,tree-sitter), so uvx/container installs are dramatically smaller and faster.Use the full [agent] extra only when you need the integrated Pydantic AI agent(see Installation).

Available MCP Tools

Auto-generated from the live MCP server — do not edit by hand.

MCP Tool Toggle Env Var Description
freshrss_reader READERTOOL Read FreshRSS streams via the Google Reader API. CONCEPT:FRSS-001
freshrss_subscriptions SUBSCRIPTIONSTOOL Curate FreshRSS feeds, categories and item tags. CONCEPT:FRSS-002

2 action-routed tools (default MCP_TOOL_MODE=condensed). Each is enabled unless its toggle is set false; set MCP_TOOL_MODE=verbose (or both) for the 1:1 per-operation surface. Auto-generated — do not edit.

Detailed tool schemas, parameter shapes, and validation constraints are preserved indocs/usage.md.

Environment Variables

Package environment variables
Variable Example Description
HOST 0.0.0.0
PORT 8000
TRANSPORT stdio options: stdio, streamable-http, sse
ENABLE_OTEL True
OTEL_EXPORTER_OTLP_ENDPOINT http://localhost:8080/api/public/otel
OTEL_EXPORTER_OTLP_PUBLIC_KEY pk-...
OTEL_EXPORTER_OTLP_SECRET_KEY sk-...
OTEL_EXPORTER_OTLP_PROTOCOL http/protobuf
EUNOMIA_TYPE none options: none, embedded, remote
EUNOMIA_POLICY_FILE mcp_policies.json
EUNOMIA_REMOTE_URL http://eunomia-server:8000
FRESHRSS_URL http://localhost:8080
FRESHRSS_USER admin
FRESHRSS_API_PASSWORD your_api_password_here
FRESHRSS_SSL_VERIFY True
READERTOOL True
SUBSCRIPTIONSTOOL True
Inherited agent-utilities variables (apply to every connector)
Variable Example Description
MCP_TOOL_MODE condensed Tool surface: condensed
MCP_ENABLED_TOOLS — Comma-separated tool allow-list
MCP_DISABLED_TOOLS — Comma-separated tool deny-list
MCP_ENABLED_TAGS — Comma-separated tag allow-list
MCP_DISABLED_TAGS — Comma-separated tag deny-list
MCP_CLIENT_AUTH — Outbound MCP auth (oidc-client-credentials for fleet calls)
OIDC_CLIENT_ID — OIDC client id (service-account auth)
OIDC_CLIENT_SECRET — OIDC client secret (service-account auth)
DEBUG False Verbose logging
PYTHONUNBUFFERED 1 Unbuffered stdout (recommended in containers)
MCP_URL http://localhost:8000/mcp URL of the MCP server the agent connects to
PROVIDER openai LLM provider for the agent
MODEL_ID gpt-4o Model id for the agent
ENABLE_WEB_UI True Serve the AG-UI web interface

17 package + 14 inherited variable(s). Auto-generated from .env.example + the shared agent-utilities set — do not edit.

Every variable the server reads. A copy-paste template lives in .env.example.

Connection & Credentials

Variable Description Default
FRESHRSS_URL Base URL of the FreshRSS instance (e.g. http://freshrss.arpa) http://localhost:8080
FRESHRSS_USER FreshRSS username (GReader Email field) —
FRESHRSS_API_PASSWORD FreshRSS API password (Settings → Authentication) —
FRESHRSS_SSL_VERIFY Whether to verify TLS certificates True

MCP server / transport

Variable Description Default
TRANSPORT stdio, streamable-http, or sse stdio
HOST Bind host (HTTP transports) 0.0.0.0
PORT Bind port (HTTP transports) 8000
MCP_TOOL_MODE Tool surface: condensed, verbose, or both condensed

Telemetry & governance

Variable Description Default
ENABLE_OTEL Enable OpenTelemetry / Langfuse export True
EUNOMIA_TYPE Authorization mode: none, embedded, remote none
EUNOMIA_POLICY_FILE Embedded policy file mcp_policies.json
EUNOMIA_REMOTE_URL Remote Eunomia server URL —

Tool toggles — each action-routed tool domain can be disabled via its toggle env var(set to false): READERTOOL, SUBSCRIPTIONSTOOL (see theAvailable MCP Tools table above).

stdio Transport (local IDEs - Cursor, Claude Desktop, VS Code)
{
  "mcpServers": {
    "freshrss-mcp": {
      "command": "uvx",
      "args": ["--from", "freshrss-agent[mcp]", "freshrss-mcp"],
      "env": {
        "FRESHRSS_URL": "https://service.example.com",
        "FRESHRSS_USER": "admin",
        "FRESHRSS_API_PASSWORD": "your_api_password"
      }
    }
  }
}
Streamable-HTTP Transport (networked / production)
{
  "mcpServers": {
    "freshrss-mcp": {
      "command": "uvx",
      "args": ["--from", "freshrss-agent[mcp]", "freshrss-mcp", "--transport", "streamable-http", "--port", "8000"],
      "env": {
        "TRANSPORT": "streamable-http",
        "HOST": "0.0.0.0",
        "PORT": "8000",
        "FRESHRSS_URL": "https://service.example.com",
        "FRESHRSS_USER": "admin",
        "FRESHRSS_API_PASSWORD": "your_api_password"
      }
    }
  }
}

Additional Deployment Options

freshrss-agent can also run as a local container (Docker / Podman / uv) or beconsumed from a remote deployment. TheDeployment guide has full,copy-paste mcp_config.json for all four transports — stdio, streamable-http,local container / uv, and remote URL:

  • Local container / uv — launch the server from mcp_config.json via uvx,docker run, or podman run, or point at a local streamable-http container by url.
  • Remote URL — connect to a server deployed behind Caddy athttp://freshrss-mcp.arpa/mcp using the "url" key.

Usage

Once configured, an LLM (or a direct caller) invokes a tool domain with an actionand a JSON params_json payload. Examples:

// Fetch the 50 most recent unread items, newest first
{
  "tool": "freshrss_reader",
  "action": "stream_contents",
  "params_json": "{\"count\": 50, \"order\": \"n\"}"
}

// Subscribe to a feed and file it under a category
{
  "tool": "freshrss_subscriptions",
  "action": "subscribe",
  "params_json": "{\"feed_url\": \"http://example.com/rss\", \"category\": \"News\"}"
}

// Mark items as read
{
  "tool": "freshrss_subscriptions",
  "action": "mark_read",
  "params_json": "{\"item_ids\": [\"tag:google.com,2005:reader/item/0001\"]}"
}

Invoking a tool with an unknown or omitted action returns the discovery payloadlisting every valid action for that domain.

Installation

Pick the extra that matches what you want to run:

Extra Installs Use when
freshrss-agent[mcp] Slim MCP server only (agent-utilities[mcp] — FastMCP/FastAPI) You only run the MCP server (smallest install / image)
freshrss-agent[agent] Full agent runtime (agent-utilities[agent,logfire] — Pydantic AI + the epistemic-graph engine) You run the integrated agent
freshrss-agent[all] Everything (mcp + agent + logfire) Development / both surfaces
# MCP server only (recommended for tool hosting — slim deps)
uv pip install "freshrss-agent[mcp]"

# Full agent runtime (Pydantic AI + epistemic-graph engine)
uv pip install "freshrss-agent[agent]"

# Everything (development)
uv pip install "freshrss-agent[all]"      # or: python -m pip install "freshrss-agent[all]"

After installation two console scripts are available:

freshrss-mcp      # run the MCP server
freshrss-agent    # run the A2A agent server

Container images (:mcp vs :agent)

One multi-stage docker/Dockerfile builds two right-sized images, selected by --target:

Image tag Build target Contents Entrypoint
knucklessg1/freshrss-agent:mcp --target mcp freshrss-agent[mcp] — slim, no engine/pydantic-ai/dspy/llama-index/tree-sitter freshrss-mcp
knucklessg1/freshrss-agent:latest --target agent (default) freshrss-agent[agent] — full agent runtime + epistemic-graph engine freshrss-agent
docker build --target mcp   -t knucklessg1/freshrss-agent:mcp    docker/   # slim MCP server
docker build --target agent -t knucklessg1/freshrss-agent:latest docker/   # full agent

docker/mcp.compose.yml runs the slim :mcp server; docker/agent.compose.yml runs theagent (:latest) with a co-located :mcp sidecar.

Knowledge-graph database (epistemic-graph)

The full agent ([agent] / :latest) embeds the epistemic-graph engine (pulled intransitively via agent-utilities[agent]). For production — or to share one knowledge graphacross multiple agents — run epistemic-graph as its own database container and point theagent at it instead of embedding it. Deployment recipes (single-node + Raft HA), connectionconfig, and the full database architecture (with diagrams) are documented in theepistemic-graph deployment guide.The slim [mcp] server does not require the database.

Documentation

Full installation, deployment, usage, and platform-provisioning guides live in thedocs/ directory and are published via mkdocs + GitHub Pages at theofficial documentation site:

  • Overview · Installation ·Usage · Deployment ·Platform · Concepts

MCP Server · Populars

MCP Server · New

    TalkToHumans

    LinkedIn MCP Server

    Safe LinkedIn MCP server for Claude, ChatGPT, Cursor & Codex. Your Agents read LinkedIn DMs, search your network, enrich profiles and draft messages you send.

    Community TalkToHumans
    bex-co

    Beancount.io Backend

    💰 Double-entry bookkeeping made easy — plain-text accounting for humans and AI agents. Polished iOS & Android app built with React Native + Expo.

    Community bex-co
    nkapila6

    mcpsurfr

    Local web search MCP server, formerly mcp-local-rag. Multi-engine deep research with on-device re-ranking. ✨ no API keys ✨

    Community nkapila6
    convex

    mcp.ts

    The open-source reactive database for app developers

    Community convex
    convex

    convex-backend

    The open-source reactive database for app developers

    Community convex