FreshRSS MCP Server
Allows AI assistants to interact with a FreshRSS instance to manage RSS feeds, including listing feeds, fetching unread items, marking items as read/unread, and getting items from specific feeds.
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., "@FreshRSS MCP Servershow me my unread articles"
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.
FreshRSS MCP Server
A Model Context Protocol server for interacting with FreshRSS feeds via the Fever API.
This TypeScript-based MCP server allows AI assistants to interact with your FreshRSS instance, enabling them to:
List and browse your RSS feeds
Fetch unread items
Mark items as read/unread
Get items from specific feeds
Features
Tools
list_feeds- List all feed subscriptionsget_feed_groups- Get feed groupsget_unread- Get unread itemsget_feed_items- Get items from a specific feedmark_item_read- Mark an item as readmark_item_unread- Mark an item as unreadmark_feed_read- Mark all items in a feed as readget_items- Get specific items by their IDs
Related MCP server: FreshRSS MCP Server
Requirements
A running FreshRSS instance with API access enabled
API endpoint URL, username, and password for your FreshRSS instance
Development
Install dependencies:
npm installBuild the server:
npm run buildFor development with auto-rebuild:
npm run watchEnvironment Variables
You need to set the following environment variables:
FRESHRSS_API_URL: URL to your FreshRSS instance (e.g., "https://rss.example.com")FRESHRSS_USERNAME: Your FreshRSS usernameFRESHRSS_PASSWORD: Your FreshRSS password
Installation
To use with Claude Desktop, add the server config:
On MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
On Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"freshrss": {
"command": "node",
"args": ["/path/to/freshrss-server/build/index.js"],
"env": {
"FRESHRSS_API_URL": "https://your-freshrss-instance.com",
"FRESHRSS_USERNAME": "your-username",
"FRESHRSS_PASSWORD": "your-password"
}
}
}
}For Cline MCP integration, add to your MCP settings:
{
"mcpServers": {
"freshrss": {
"command": "node",
"args": ["/path/to/freshrss-server/build/index.js"],
"env": {
"FRESHRSS_API_URL": "https://your-freshrss-instance.com",
"FRESHRSS_USERNAME": "your-username",
"FRESHRSS_PASSWORD": "your-password"
}
}
}
}Debugging
Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the MCP Inspector, which is available as a package script:
npm run inspectorThe Inspector will provide a URL to access debugging tools in your browser.
Security Note
This server requires your FreshRSS credentials. For security:
Never commit your credentials to version control
Always use environment variables for sensitive information
Consider using a dedicated FreshRSS account with appropriate permissions
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! See CONTRIBUTING.md for details.
Available Tools
8 toolsget_feed_groupsC
Get feed groups
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It merely states the action without revealing whether the operation is read-only, what it returns, any side effects, or required permissions. This is a significant gap for a retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short ('Get feed groups'), which is under-specified rather than concise. It leaves out essential information and does not earn its place as a helpful description beyond naming the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's simplicity (no params, no output schema), the description is incomplete. It does not explain what a feed group is, what the response looks like, or how it relates to sibling tools, leaving the agent with insufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is 100% vacuously. Per the baseline for 0 params, a score of 4 is appropriate. The description does not need to add parameter details since none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get feed groups' uses a clear verb ('get') and resource ('feed groups'), indicating the action of retrieving feed groups. However, it does not distinguish itself from sibling tools like 'list_feeds', and does not explain what feed groups are in relation to feeds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'list_feeds' or 'get_feed_items'. There is no context, prerequisites, or exclusions, leaving the agent without direction on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feed_itemsA
Get items from a specific feed
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | Feed ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral context. It only restates the function name without disclosing details such as read-only nature, return format, pagination, or error handling. There is no added context beyond the basic action, so it fails to provide meaningful behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded. There is no verbiage or repetition; every word contributes to the meaning. It earns its place without wasting tokens.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one parameter and no output schema, the description is minimally sufficient but lacks completeness. It does not explain what 'items' means, whether any filtering or sorting occurs, or what the response contains. Given the absence of annotations and output schema, a richer description would aid completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single parameter 'feed_id' as 'Feed ID' with high coverage (100%). The description's 'from a specific feed' reinforces this mapping but adds no new semantic detail beyond what the schema provides. Baseline 3 is appropriate given the full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get items') and the scope ('from a specific feed'), which distinguishes it from the sibling tool 'get_items' that likely retrieves items in a broader context. The verb and resource are specific, leaving no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'from a specific feed' implies the tool is intended when the user has a feed_id in mind, but it does not explicitly state when to prefer this over alternatives like 'get_items' or 'get_unread'. No exclusions or alternative recommendations are provided, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_itemsA
Get specific items by their IDs
| Name | Required | Description | Default |
|---|---|---|---|
| item_ids | Yes | Array of item IDs to get |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states that it retrieves items, omitting any details about read-only behavior, handling of invalid IDs, pagination, or response structure. The term 'Get' hints at a safe operation, but the lack of elaboration leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of seven words, front-loaded with the key verb and object. It contains zero redundancy and efficiently communicates the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple getter with one parameter and no output schema, so the description need not be long. However, it does not state what the response looks like or what happens when IDs are missing/invalid. It is minimally complete for the task but lacks edge-case detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the only parameter (item_ids as array of strings), and the tool description adds no extra meaning beyond that. Since schema coverage is 100%, a baseline score of 3 is appropriate, but no additional semantic value is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Get' is specific, the resource 'items' is clear, and the qualifier 'by their IDs' distinguishes it from sibling tools like get_feed_items or list_feeds. This removes ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'specific items by their IDs' implies the tool is for fetching items when you already know their IDs, which provides some context. However, it does not mention alternatives or explicitly state when not to use it, leaving the agent to infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unreadB
Get unread items
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. 'Get' implies a read-only operation, but the description doesn't explicitly state this, nor does it disclose whether the tool modifies read status, the return format, or any other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded phrase with no wasted words. It efficiently communicates the core action and target, though it might be under-specified for context. However, brevity alone is not penalized when the structure is clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool lacks an output schema, and sibling tools include get_items and get_feed_items, creating ambiguity about what 'unread items' refers to. The description doesn't clarify the scope, return format, or relationship to siblings, leaving significant gaps in completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description doesn't need to explain parameter meanings. According to the rubric, a baseline of 4 applies when there are no parameters, and this description satisfies that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action 'Get' and the resource 'unread items', establishing a basic purpose. However, it doesn't distinguish from siblings like get_items or get_feed_items, leaving ambiguity about the type of items being retrieved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_items or get_feed_items. No contexts, exclusions, or conditions are mentioned, leaving the agent without direction for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feedsA
List all feed subscriptions
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing behavior. It only states 'List all feed subscriptions,' which implies a read-only operation but does not mention return format, pagination, ordering, or side effects. This is minimally transparent for a listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no superfluous words. It is perfectly concise and front-loaded, stating exactly what the tool does without any filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters, no annotations, and no output schema, the description is minimally viable. It lacks information about return fields, whether all feeds are returned at once, or any limits. The presence of sibling tools like get_feed_groups suggests more context could be useful, but the description is not grossly incomplete for a simple list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially 100% covered. The description does not need to explain parameter meaning, and the baseline for zero-parameter tools is 4. No additional information is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all feed subscriptions' uses a specific verb ('list') and identifies the exact resource ('feed subscriptions'). It clearly distinguishes from siblings like get_feed_items or get_unread, which focus on items or unread counts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of what differentiates it from get_feed_groups or get_items, and no exclusions or context. The implied usage is simply to list feeds, but no explicit direction is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_feed_readA
Mark all items in a feed as read
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | Feed ID to mark as read |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral characteristics. It indicates a write operation ('mark') but does not disclose potential side effects, reversibility, or required permissions. This leaves the agent without information on mutation impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that directly states the action and scope. Every word contributes, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with no output schema, the description covers the core behavior and target. It would benefit from mentioning idempotency or return value, but the simple scope makes it adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only provides 'Feed ID to mark as read' with a generic description. The tool description adds the key insight that the operation affects 'all items' within the feed, clarifying the scope that the schema alone does not fully convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Mark' with the resource 'all items in a feed' and the outcome 'as read'. This distinguishes it from sibling mark_item_read, which targets individual items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for bulk-marking a feed's items, contrasting with item-level tools among siblings. However, it does not explicitly name alternatives or provide exclusions, so it's clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_item_readB
Mark an item as read
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | Item ID to mark as read |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action without detailing idempotency, side effects, failure modes, or reversibility. This is insufficient for an agent to understand the tool's full behavioral profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that is perfectly front-loaded and contains no filler. It earns its place by immediately conveying the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, the description is minimal but lacks critical context such as differentiation from siblings and behavioral caveats. The absence of usage guidelines and behavioral transparency makes it incomplete for an AI agent deciding which tool to use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool description adds no information about the item_id parameter beyond what the input schema already provides, which has 100% coverage with a clear description. The baseline of 3 is appropriate since the schema fully documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Mark an item as read' – a specific verb ('mark') and resource ('item'). It distinguishes from siblings like mark_feed_read (feed vs item) and mark_item_unread (read vs unread) by its specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as mark_item_unread or mark_feed_read. There is no mention of prerequisites, exclusions, or typical invocation scenarios. This is a complete lack of usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_item_unreadB
Mark an item as unread
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | Item ID to mark as unread |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries full burden. It only states the action 'mark as unread' without disclosing idempotency, permissions, side effects, or return behavior—critical gaps for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with zero wasted words. It is appropriately sized for the tool's simplicity and front-loads the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though the tool is simple with one well-described parameter and no output schema, the absence of annotations and lack of guidance about effects or prerequisites leaves the description minimally complete but with clear gaps in behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully covers the single parameter item_id with a clear description, and the tool description adds no additional semantic detail. Since schema coverage is 100%, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'mark' and resource 'item' with the target state 'unread', clearly conveying the tool's function. It distinguishes from siblings by being the opposite of mark_item_read and targeting items rather than feeds, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like mark_item_read or mark_feed_read. The description only states the action, leaving the selection context to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
get_feed_groups - First observed
get_feed_items - First observed
get_items - First observed
get_unread - First observed
list_feeds - First observed
mark_feed_read - First observed
mark_item_read - First observed
mark_item_unread
TDQS
Scored across 8 tools
Each tool has a clear, distinct purpose: listing feeds, retrieving items by different criteria, and toggling read state. The three retrieval tools (get_unread, get_feed_items, get_items) are differentiated by their filters, and the mark operations are unambiguous.
Most tools follow a get_<resource> or mark_<resource>_<state> pattern, but list_feeds uses 'list' instead of 'get', and get_unread omits the noun 'items'. These minor deviations are still readable and predictable.
Eight tools is well-scoped for an RSS reader, covering the core read and mark operations without excessive granularity. Each tool earns its place in the set.
The read and mark workflows are well covered, but the server lacks feed management operations (add, update, delete feeds) and has no search capability. These gaps limit the toolset to a read-only consumer rather than a full FreshRSS manager.
Maintenance
Related MCP Connectors
Track and browse RSS feeds with ease. Fetch the latest entries from any feed URL and extract full…
RSS, Atom and JSON feeds for agents: find a site's feed, read items as JSON, keyless news search.
Enable AI assistants to interact seamlessly with Feeef e-commerce stores, products, and orders usi…
Your curated sources (RSS, YouTube, podcasts, Google News) as context for any AI agent. 26 tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with RSS readers that support the FreshRSS API through natural language. Allows users to manage and query their RSS feeds and articles via LLM conversations.7MIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with FreshRSS RSS feed readers through the Google Reader compatible API. Supports feed management, article reading/searching, and marking articles as read or starred.-
- AlicenseBqualityDmaintenanceEnables interaction with FreshRSS instances through the Google Reader API. Supports managing articles, feeds, folders, labels, and OPML import/export for RSS feed aggregation through natural language.2720 npm2MIT
- FlicenseNot gradedqualityDmaintenanceEnables RSS feed management using the Fever API, supporting retrieval of feeds, groups, and items with read/save actions.5-