freshrss-mcp
freshrss-mcp
Сервер для Model Context Protocol для FreshRSS, самоуправляемого агрегатора RSS и Atom фидов.
Он использует API, совместимый с Google Reader, который FreshRSS предоставляет по адресу /api/greader.php, и скрывает особенности этого API за аргументами инструментов, которые ассистент может реально использовать: числовые идентификаторы фидов, имена категорий и меток, даты в формате ISO и десятичные идентификаторы статей вместо идентификаторов потоков вида user/-/state/com.google/… и шестнадцатеричных тегов элементов.
📖 Полная документация: freshrss-mcp.ni-c.de

Требования
Node.js 22 или новее
Экземпляр FreshRSS (разработан для версии 1.29) с
включенным API: Настройки → Аутентификация → "Allow API access"
установленным API-паролем для пользователя: Настройки → Профиль → API management. Это отдельный пароль, отличный от пароля для входа в веб-интерфейс.
Related MCP server: Conduit
Конфигурация
Переменная | Обязательно | Описание |
| да | Корневой URL экземпляра, например |
| да | Имя пользователя FreshRSS. |
| да | API-пароль со страницы профиля, а не пароль для входа в веб-интерфейс. |
| нет |
|
| нет |
|
Сервер запускается без учетных данных, поэтому его инструменты остаются перечисляемыми; каждый вызов завершается ошибкой с этими инструкциями по настройке.
Claude Code
claude mcp add freshrss -- npx -y @ni-c/freshrss-mcpClaude Desktop
{
"mcpServers": {
"freshrss": {
"command": "npx",
"args": ["-y", "@ni-c/freshrss-mcp"],
"env": {
"FRESHRSS_URL": "https://rss.example.com",
"FRESHRSS_USER": "alice",
"FRESHRSS_API_PASSWORD": "…"
}
}
}
}Codex
[mcp_servers.freshrss]
command = "npx"
args = ["-y", "@ni-c/freshrss-mcp"]
env = { FRESHRSS_URL = "https://rss.example.com", FRESHRSS_USER = "alice", FRESHRSS_API_PASSWORD = "…" }Инструменты
Чтение
Инструмент | Описание |
| Аутентифицированная учетная запись — быстрая проверка учетных данных. |
| Все подписки с их категорией и количеством непрочитанных. |
| Категории (папки фидов) и пользовательские метки (теги на статьях). |
| Общее и по фидам/категориям количество непрочитанных, отсортированное. |
| Статьи фида, категории, метки или встроенного потока с выдержками или ограниченным полным текстом. |
| Полный текст конкретных статей по идентификатору. |
| Только идентификаторы — дешевый способ собрать набор для |
| Все подписки в виде документа OPML. |
Запись
Не регистрируются, если FRESHRSS_READ_ONLY=true.
Инструмент | Описание | Подтверждение |
| Установка состояния прочтения, звездочки и меток для конкретных статей. | — |
| Отметить весь фид, категорию, метку или поток как прочитанный. | да |
| Подписаться на фид или URL веб-сайта. | — |
| Переименовать фид или переместить в другую категорию. | — |
| Удалить фид и все его сохраненные статьи. | да |
| Переименовать категорию или пользовательскую метку. | — |
| Удалить категорию или пользовательскую метку. | да |
| Подписаться на каждый фид в документе OPML. | да |
Поиск отсутствует
FreshRSS не предоставляет полнотекстовый поиск через свой API — конечные точки Google Reader фильтруют только по потоку, состоянию прочтения и дате. Поэтому list_articles не имеет параметра запроса; сузьте результат с помощью feed_id/category и since/until и отфильтруйте полученные статьи самостоятельно.
Безопасность
Текст статей считается ненадежным вводом. Все, что этот сервер возвращает из FreshRSS, было написано третьей стороной в интернете, поэтому ответы, содержащие текст статей, заголовки или имена фидов, явно помечаются как данные, а не как инструкции.
Деструктивные инструменты требуют двух шагов. Они возвращают одноразовый токен подтверждения, привязанный к конкретной цели; второй вызов должен содержать его. Простой булевый флаг можно было бы установить при первом вызове или склонить к этому текст, скрытый в фиде. Сообщения подтверждения намеренно никогда не цитируют заголовки или имена, полученные из API.
Бюджеты ответов. FreshRSS возвращает до 500 000 символов HTML на одну статью. Текст статьи преобразуется в обычный текст, ограничивается на статью и на общий бюджет ответа, и является опциональным в списках.
Учетные данные читаются один раз, затем удаляются из
process.envи никогда не записываются на диск. Запросы никогда не следуют перенаправлениям, которые могли бы повторно отправить заголовок авторизации другому хосту, а ослабленная проверка TLS ограничена этим соединением, а не всем процессом.URL фидов редактируются. FreshRSS хранит фиды с HTTP-аутентификацией как
https://user:password@host/feed. Часть с информацией о пользователе удаляется, прежде чем URL фида попадет в результат инструмента или экспорт OPML, поэтомуlist_feedsне может вывести пароль платного или приватного фида в транскрипт.subscribe_feedотклоняет внутренние цели. FreshRSS извлекает URL на стороне сервера, что делает инструмент примитивом SSRF, доступным из текста внутри статьи. Адреса loopback и link-local, включая конечные точки метаданных облака, отклоняются. Адреса частных локальных сетей остаются разрешенными, потому что в самоуправляемых установках законно подписываются на фиды в своей собственной сети.import_opmlотклоняет<!DOCTYPE>. В этом процессе не выполняется разбор XML, но документ передается FreshRSS, где объявление типа документа является носителем атак расширения сущностей и внешних сущностей. OPML никогда не нуждается в нем.FRESHRSS_READ_ONLY=trueне регистрирует инструменты записи вообще, а не отклоняет их во время вызова.
Какие инструменты защищены токеном подтверждения: mark_all_as_read, unsubscribe_feed, delete_category_or_label и import_opml. mark_articles намеренно не защищен — вызывающий явно указывает каждую из не более 100 статей, и каждое поле можно сбросить — но он объявлен деструктивным, поэтому клиент все равно может запросить подтверждение.
Контейнер
docker run --rm -i \
-e FRESHRSS_URL=https://rss.example.com \
-e FRESHRSS_USER=alice \
-e FRESHRSS_API_PASSWORD=... \
ghcr.io/ni-c/freshrss-mcp:latestОбраз публикуется для linux/amd64 и linux/arm64 с SBOM и происхождением сборки. Он работает как непривилегированный пользователь node и не содержит npm, так что в нем есть только Node, зависимости времени выполнения и dist/.
Разработка
npm install
npm run lint && npm run build && npm test
npm run test:coverageСм. CONTRIBUTING.md для получения одноразового FreshRSS для разработки. Полная документация находится по адресу freshrss-mcp.ni-c.de.
Релиз
Перенесите записи
[Unreleased]в CHANGELOG.md под новую версию и увеличьтеversionвpackage.json.npm run lint && npm run build && npm run test:coverage.Зафиксируйте, затем создайте тег:
git tag -s vX.Y.Z -m vX.Y.Z && git push origin main vX.Y.Z.
Тег запускает release.yml, который проверяет соответствие тега package.json, публикует в npm через Trusted Publishing с подтверждением происхождения (без токена), создает релиз на GitHub из раздела CHANGELOG и публикует запись в MCP Registry. Если только шаг реестра завершается ошибкой, исправьте его в main и повторно запустите mcp-registry.yml вручную — никогда не перезапускайте задачу с тегом, так как это проверит старую версию дерева.
Лицензия
MIT
This server cannot be installed
Maintenance
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server for RSS feed aggregation and article content extraction, allowing users to subscribe to feeds and extract full article content as Markdown.21915MIT
- Flicense-qualityDmaintenanceA self-hosted RSS reader MCP server that manages RSS subscriptions and fetches live feed content, deployable on AWS.
- Alicense-qualityAmaintenanceMCP server for FreshRSS RSS reader enabling feed reading, subscription management, and item actions via the Google Reader compatible API.MIT
- AlicenseBqualityDmaintenanceAn MCP server that provides RSS feed tools for Claude Desktop, enabling fetching and parsing RSS feeds with configurable feeds and blocklists.6MIT
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
MCP server for accessing curated awesome list documentation
A basic MCP server to operate on the Postman API.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ni-c/freshrss-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server