Skip to main content
Glama
rakeshgangwar

FreshRSS MCP Server

README.md
# 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 subscriptions
- `get_feed_groups` - Get feed groups
- `get_unread` - Get unread items
- `get_feed_items` - Get items from a specific feed
- `mark_item_read` - Mark an item as read
- `mark_item_unread` - Mark an item as unread
- `mark_feed_read` - Mark all items in a feed as read
- `get_items` - Get specific items by their IDs

## Requirements

- A running FreshRSS instance with API access enabled
- API endpoint URL, username, and password for your FreshRSS instance

## Development

Install dependencies:
```bash
npm install
```

Build the server:
```bash
npm run build
```

For development with auto-rebuild:
```bash
npm run watch
```

### Environment 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 username
- `FRESHRSS_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`

```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:

```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"
      }
    }
  }
}
```

### Debugging

Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the [MCP Inspector](https://github.com/modelcontextprotocol/inspector), which is available as a package script:

```bash
npm run inspector
```

The 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](LICENSE) file for details.

## Contributing

Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for details.

TDQS

A3.5/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness3/5

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

ActivityInactive
ResponsivenessNo issues