mcp-feed-reader-crunchtools
This server is a secure, SQLite-backed MCP server for managing RSS/Atom feeds, entries, and categories, with full-text search and OPML import/export.
Manage feeds: add feeds by URL (optionally assigning a category), list feeds with unread counts, get feed details, delete a feed with its entries, and trigger network crawls.
Manage entries: list entries with filters (feed, category, unread-only, date windows, pagination), read full entry content (auto-marks read), mark entries read/unread, and run FTS5 full-text search across titles and content.
Manage categories: list categories with feed counts, create, rename, and delete categories (feeds become uncategorized).
Import/export & stats: import feeds from an OPML file (creating categories from outline groups), export all feeds as OPML XML, and get dashboard stats (total feeds, unread count, entries per category).
Background freshness: nothing crawls automatically — refresh via the
refresh_feeds_tool, the--fetchCLI flag, or the bundled systemd timer (hourly plus 05:45), with conditional fetching (ETag/If-Modified-Since) and exponential-backoff retries.Configuration: set the SQLite database path via
FEED_READER_DB, and route feed fetches through standardHTTP_PROXY/HTTPS_PROXY/NO_PROXYvariables.
Reads and manages RSS/Atom/RDF feeds: add, list, and delete feeds, crawl sources for new content with ETag/If-Modified-Since conditional fetching and retry backoff, browse and full-text search (FTS5) cached entries, mark entries read/unread, organize feeds into categories, and import/export subscriptions as OPML.
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., "@mcp-feed-reader-crunchtoolslist all feeds with unread counts"
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.
mcp-feed-reader-crunchtools
Secure MCP server for RSS/Atom feed reading with SQLite backend.
Installation
uvx (recommended)
uvx mcp-feed-reader-crunchtoolspip
pip install mcp-feed-reader-crunchtoolsContainer
podman run -v feedreader-data:/data quay.io/crunchtools/mcp-feed-readerRelated MCP server: @missionsquad/mcp-rss
Configuration
Variable | Default | Description |
|
| SQLite database path |
| (none) | Standard httpx proxy variables, honoured for every feed fetch. Useful when a publisher rate-limits your egress IP — Reddit returns 429 to datacentre ranges regardless of User-Agent |
Tools (17)
Feed Management
add_feed_tool— Add an RSS/Atom feed by URLlist_feeds_tool— List all feeds with unread countsget_feed_tool— Get feed detailsdelete_feed_tool— Remove a feedrefresh_feeds_tool— Crawl feed sources for new content (slow, prefer systemd timer)
Entry Management
list_entries_tool— List entries (filterable, paginated)read_entry_tool— Read full entry content (auto-marks read)mark_read_tool— Mark entries as readmark_unread_tool— Mark entry as unreadsearch_entries_tool— Full-text search (FTS5)
Category Management
list_categories_tool— List categories with countscreate_category_tool— Create categoryrename_category_tool— Rename categorydelete_category_tool— Delete category
Import/Export
import_opml_tool— Import from OPML fileexport_opml_tool— Export as OPMLget_stats_tool— Dashboard stats
Background Fetching
Nothing in the server crawls on its own. list_entries_tool and friends read a
cache; if no one calls --fetch, that cache goes stale and every reader sees an
empty feed with no error anywhere. A deployment without a crawl trigger is a
broken deployment — this bit the daily briefing, which reported "no news" for
days while all 61 feeds sat unfetched.
# Fetch all feeds via CLI
mcp-feed-reader-crunchtools --fetchsystemd timer (recommended)
deploy/ ships the two units used in production. Copy them to
/etc/systemd/system/, adjust the container name in the service if yours
differs, then:
sudo systemctl daemon-reload
sudo systemctl enable --now mcp-feeds-refresh.timerThe service runs --fetch inside the running container
(podman exec), so the database keeps the SELinux category of the process that
owns it. Do not bind-mount the data directory into a second container with
:Z to run the crawl — that relabels the volume and locks the live server out.
The timer fires hourly, plus once at 05:45. That second entry is not redundant: consumers window entries on publication time, so an entry published between the last crawl and a 06:00 report is missing from that report and already older than the next day's window start — it is lost for good. Any consumer on a fixed schedule wants a crawl shortly before it.
Feeds are fetched conditionally (ETag / If-Modified-Since). A rate limit,
gateway 5xx, or dropped connection is retried with exponential backoff, up to
three attempts in all, before the feed is recorded as failed.
License
AGPL-3.0-or-later
Available Tools
17 toolsadd_feed_toolAdd Feed ToolB
Add an RSS/Atom feed by URL, optionally assign to a category.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Feed URL (RSS, Atom, or RDF) | |
| category | No | Category name (created if it does not exist) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses no behavioral traits beyond the basic operation. It says nothing about duplicate-feed handling, URL validation, required permissions, or error behavior for an invalid feed URL.
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?
A single efficient sentence with the core action front-loaded and zero filler. Every clause ('by URL', 'optionally assign to a category') carries information.
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?
An output schema exists, so return values need not be explained, and the schema fully documents the parameters. Still, as a mutation tool with no annotations, it omits duplicate handling and failure modes, leaving gaps an agent might need.
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?
Schema description coverage is 100%, so both parameters (url and category) are already fully documented in the schema, including the auto-create behavior for categories. The description adds no syntax or format detail beyond what the schema provides, making the baseline 3 correct.
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 clear verb ('Add') plus a specific resource ('RSS/Atom feed') and the mechanism ('by URL'), which is unambiguous on its own. However, it does not distinguish this from the sibling import_opml_tool, which also adds feeds in bulk, leaving the agent to infer the boundary.
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?
There is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives such as import_opml_tool for bulk additions. The only contextual hint is the word 'optionally' for the category, which does not route the agent between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_category_toolCreate Category ToolC
Create a new category.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Category name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says 'Create' but discloses nothing about duplicate-name handling, required permissions, idempotency, or whether the call is reversible — real gaps for a mutation tool. An output schema exists, so return values need not be explained here.
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?
One short, front-loaded sentence with no waste. It is efficient, though it sits close to the under-specification line rather than being genuinely informative.
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 creation tool with an output schema, the basics are covered and return values need not be described. Still, as a mutation with zero annotation coverage, it omits duplicate handling, error behavior, and permissions, so it is only minimally 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?
Schema description coverage is 100% and there is a single parameter, so the schema fully documents 'name'. The description adds no syntax, format, or uniqueness constraints beyond what the schema already states, which lands at the baseline 3.
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 gives a specific verb (Create) and resource (a new category), which is unambiguous about what the tool does. It does not, however, differentiate from adjacent siblings such as rename_category_tool or delete_category_tool, leaving the routing distinction to the tool names alone.
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?
There is no when-to-use or when-not-to-use guidance, nor any mention of the alternative category tools. An agent must infer from the name that this is the creation path versus list/rename/delete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_category_toolDelete Category ToolB
Delete a category. Feeds in this category become uncategorized.
| Name | Required | Description | Default |
|---|---|---|---|
| category_id | Yes | Category ID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does usefully disclose the cascade effect ('feeds in this category become uncategorized'), which the schema does not. However, it omits whether the deletion is permanent/irreversible, whether confirmation or elevated permissions are required, and whether the feeds themselves are affected beyond losing their category.
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?
Two short sentences, no filler, and the core action is front-loaded with the side effect immediately after. Every clause earns its place.
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?
An output schema exists, so return values need not be explained. For a destructive mutation with zero annotations, however, the definition should at least state permanence and any required permissions or confirmation; the cascade note partially compensates but leaves real gaps.
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?
Single parameter with 100% schema description coverage ('Category ID to delete'), so the schema already documents it fully. The description adds no format or sourcing detail beyond what the schema provides, which is the expected baseline here.
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?
States a specific verb and resource ('Delete a category'), which clearly separates it from delete_feed_tool and the other category siblings by resource name. It does not explicitly name an alternative tool or scope, but the purpose is unambiguous.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as rename_category_tool or list_categories_tool. The only usage-relevant signal is the implied consequence that feeds are detached, which the agent must infer as the reason to be careful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_feed_toolDelete Feed ToolB
Remove a feed and all its entries.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | Feed ID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the destructive cascade ('and all its entries'), which goes beyond the schema, but it omits irreversibility, permission requirements, and confirmation semantics for a permanently destructive operation.
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?
One short sentence with the operation and its main side effect front-loaded. No filler or 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?
An output schema exists, so return values need not be explained, and one parameter at full coverage is documented. However, for a destructive tool with no annotations, the description leaves the agent without warnings on irreversibility or required permissions.
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?
Schema description coverage is 100% with a single required feed_id already documented as 'Feed ID to delete'. The description adds no format, valid-range, or lookup guidance beyond what the schema provides, so the baseline 3 applies.
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?
States a specific verb (Remove) and resource (a feed), plus the cascading scope (all its entries). Clear enough to distinguish from list_feeds_tool or add_feed_tool, though it does not explicitly name the sibling it contrasts with.
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 on when to use this versus alternatives (e.g., delete_category_tool, or archiving a feed), no prerequisites, and no warning about when it should not be called. Usage is only implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_opml_toolExport Opml ToolARead-only
Export all feeds as OPML XML string.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe, non-mutating read. The description adds that the scope is ALL feeds (no filtering) and the serialization format is OPML XML, which is modest extra value, but nothing about size limits, streaming, or failure modes.
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?
A single front-loaded sentence with no filler; every word carries information (action, scope, format).
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 parameterless read tool with an output schema documenting the return value and readOnlyHint covering safety, the description is essentially sufficient. A note on scale (e.g. large libraries) would make it 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 tool takes zero parameters, so the baseline of 4 applies; there is no parameter semantics for the description to compensate for.
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?
States a specific verb (export), resource (all feeds), and output format (OPML XML string), which clearly distinguishes it from import_opml_tool. It does not explicitly name the sibling, so it falls short of a 5.
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 statement of when to use this versus alternatives such as list_feeds_tool or import_opml_tool, nor any prerequisites. Usage is only inferable from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feed_toolGet Feed ToolARead-only
Get details for a single feed including entry counts.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | Feed ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this as a safe read, so the description's main added value is the note that entry counts are included in the response. It says nothing about what happens with an invalid or nonexistent feed_id, nor about auth requirements, and the output schema covers the return shape.
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?
A single front-loaded sentence with no filler; the resource and the notable return detail (entry counts) both appear immediately.
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 read tool with an output schema and readOnlyHint coverage, the description is nearly sufficient; only error/not-found behavior for a bad feed_id is left unspecified.
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?
One parameter with 100% schema description coverage; the schema already documents feed_id as a positive integer. The description adds no syntax, format, or constraint detail beyond what the schema provides, so the baseline 3 applies.
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?
States a specific verb and resource ('Get details for a single feed') and adds scope via 'a single feed,' which implicitly separates it from list_feeds_tool. It does not name any sibling explicitly, so an agent must infer the single-vs-list split.
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?
'Single feed' implies the use case of fetching one known feed by ID, contrasted with the listing tools, but there is no explicit when-to-use statement or mention of alternatives such as list_feeds_tool or get_stats_tool. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stats_toolGet Stats ToolARead-only
Get dashboard stats: total feeds, unread count, entries per category.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe, non-mutating read, so the bar is lower. The description usefully enumerates the specific aggregates returned, but adds nothing about scope, refresh/freshness of the counts, or cost relative to listing tools.
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?
A single front-loaded sentence with the verb first and the returned metrics immediately after the colon. No filler or restated title content.
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?
With no inputs, an output schema present, and safety covered by annotations, the description supplies everything an agent needs to decide to call it. The only omission is guidance on when this aggregate is preferable to the sibling list tools.
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 takes zero parameters (additionalProperties: false), so there is nothing for the description to document. Baseline 4 applies; the metric list in the description loosely maps to the output schema rather than inputs.
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?
States a specific verb ("Get") and resource ("dashboard stats") and enumerates the metrics returned (total feeds, unread count, entries per category). It is unambiguous about what the tool produces, though it does not explicitly note that it is the only stats/aggregate tool among the sibling listing tools.
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?
There is no when-to-use guidance, no mention of prerequisites, and no routing away from siblings such as list_feeds_tool or list_entries_tool. The agent must infer that this is a cheap aggregate summary versus making multiple list calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_opml_toolImport Opml ToolB
Import feeds from an OPML file, creating categories from outline groups.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | Path to the OPML file |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose a valuable non-obvious side effect — categories are auto-created from outline groups — which goes beyond the tool name. However, it omits duplicate handling, whether existing feeds are merged or skipped, and any permission/auth requirements for a mutation operation.
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?
A single compact sentence with the verb and resource front-loaded and no filler. It is appropriately sized, though the category-creation side effect could have been surfaced more prominently given it is the most consequential behavior.
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?
An output schema exists so return values needn't be described, and the schema covers the sole parameter. But for a bulk mutation tool with no annotations, the description should address idempotency and what happens to pre-existing feeds/categories — a real gap for an import 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?
One parameter with 100% schema description coverage, so the schema already defines file_path. The description adds no format, path-resolution, or encoding detail beyond what the schema provides, so the baseline 3 applies.
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?
States a specific verb ('Import') and resource ('feeds from an OPML file') plus a secondary effect ('creating categories from outline groups'). It clearly distinguishes itself from the sibling export_opml_tool by direction, though it never names the sibling explicitly.
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 on when to use this versus add_feed_tool or export_opml_tool, no prerequisites (e.g., file must be accessible/readable), and no exclusions. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categories_toolList Categories ToolARead-only
List all categories with feed counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes that this is a safe, non-mutating read, so the description carries a lower burden. "With feed counts" adds useful context about what the read returns, but it discloses nothing about ordering, completeness, or pagination behavior beyond that.
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?
A single six-word sentence that front-loads the action and resource, with the only extra clause ("with feed counts") earning its place by clarifying the payload.
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 zero-parameter read tool with an output schema, an annotations-declared safety profile, and full schema coverage, the description supplies what an agent needs to select and call it. Minor gap: it does not say whether the list is exhaustive or scoped to the authenticated user.
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 takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. No misleading parameter claims are made.
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?
States a specific verb and resource ("List all categories") and adds a scope detail ("with feed counts") that distinguishes it from the category-mutation siblings like create_category_tool and rename_category_tool. It does not, however, explicitly contrast itself with list_feeds_tool or get_stats_tool, which also surface aggregate listing data.
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?
Usage is implied by the verb: an agent can infer this is the call for enumerating categories. There is no statement of when to prefer it over get_stats_tool or list_feeds_tool, and no exclusions, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entries_toolList Entries ToolARead-only
List entries with optional filters.
Date-window filters apply to COALESCE(published, created_at), so entries with no publish date still fall in the window by ingest time. Use them to fetch only a trailing period instead of paging through everything.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries to return (1-500, default: 50) | |
| offset | No | Pagination offset (default: 0) | |
| feed_id | No | Filter by feed ID | |
| since_days | No | Only entries dated within the last N days (1-366). Mutually exclusive with published_after/published_before. | |
| category_id | No | Filter by category ID | |
| unread_only | No | Show only unread entries (default: True) | |
| published_after | No | Inclusive lower bound, ISO-8601 date or datetime (e.g. "2026-08-23" or "2026-08-23T00:00:00Z"). | |
| published_before | No | Inclusive upper bound, ISO-8601 date or datetime. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true; the description goes further by disclosing that date-window filters compare against COALESCE(published, created_at), so undated entries still fall in a window by ingest time. That is real behavioral context an agent could not infer from the annotations or schema, though pagination/ordering behavior is left unstated.
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?
Two short sentences with no filler, and the non-obvious COALESCE caveat is placed immediately after the topic sentence rather than buried. Nothing restates the tool name or the schema.
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?
An output schema exists, so return values need no explanation, and all 8 optional parameters are fully documented in the schema. The description's single job — conveying the surprising date-window semantics — is done, and the tool is read-only so no auth or destructive caveats are needed.
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?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: it explains the actual comparison column used by since_days/published_after/published_before, which changes how an agent interprets those bounds. It does not clarify the interaction between unread_only's true default and the date filters, so it stops short of a 5.
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?
States a specific verb and resource ('List entries') plus the fact that filters are optional, so the agent knows the shape of the call. However, it never distinguishes itself from the sibling search_entries_tool, leaving the boundary between plain listing and searching to inference.
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?
It gives one concrete usage instruction — use date-window filters to fetch a trailing period instead of paging through everything — which is genuine guidance for a subset of the call. But there is no when-not guidance and no routing to search_entries_tool, which is the obvious alternative for filtered retrieval, so usage is only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feeds_toolList Feeds ToolBRead-only
List all feeds with unread counts.
| Name | Required | Description | Default |
|---|---|---|---|
| category_id | No | Filter by category ID (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation already declares this is a safe read operation, so the description need not carry the safety profile. It adds that unread counts are returned, which is behavioral value, but says nothing about ordering, pagination, or filtering behavior beyond the schema.
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?
A single sentence that front-loads the action and the key payload (unread counts). No wasted words.
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?
With an output schema, a fully documented parameter, and readOnly annotations, the definition is nearly complete. The remaining gap is that it does not route the agent relative to the many sibling list/get tools.
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?
Schema description coverage is 100% and the single optional category_id is fully documented in the schema. The description adds no syntax or semantic detail beyond what the schema provides, so the baseline 3 applies.
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?
States a specific verb+resource ("List all feeds") and adds the useful detail that unread counts are included. However, it does not distinguish itself from siblings like get_feed_tool or list_categories_tool, so the agent must infer the collection-vs-single distinction.
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?
There is no when-to-use guidance, no exclusions, and no reference to alternatives such as get_feed_tool (single feed) or search_entries_tool. The agent must decide purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_read_toolMark Read ToolC
Mark entries as read.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | No | Mark all entries in a feed as read | |
| entry_id | No | Mark a single entry as read | |
| all_entries | No | Mark ALL entries as read (use with caution) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: not that this is a state mutation, not whether it is reversible, not whether it affects unread counters, and not that omitting all three optional parameters is a no-op. The only hint of caution ("use with caution") lives in the schema, not the description.
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?
One short sentence is front-loaded and free of filler, which is good. But the terseness crosses into under-specification rather than efficient conciseness for a mutation tool with three mutually exclusive scope options.
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?
An output schema exists, so return values need not be explained, but for a no-annotation mutation tool with three optional, scope-defining parameters the description should at minimum say that exactly one scope should be supplied and that state is changed. None of that is present.
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?
Schema description coverage is 100%, so each of the three parameters is already documented in the schema (feed_id = all entries in a feed, entry_id = a single entry, all_entries = everything). The description adds no meaning beyond that, so the baseline 3 applies.
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 gives a clear verb+resource ("Mark entries as read") that an agent can act on immediately. It does not, however, distinguish this from the sibling mark_unread_tool or clarify whether the scope is a single entry, a feed, or everything — that distinction is only visible in the schema.
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?
There is no when-to-use guidance, no prerequisites, and no mention of the obviously related alternative mark_unread_tool. The agent gets no signal about when this tool is the right choice versus read_entry_tool or list_entries_tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_unread_toolMark Unread ToolC
Mark an entry as unread.
| Name | Required | Description | Default |
|---|---|---|---|
| entry_id | Yes | Entry ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether the operation is idempotent, whether it affects unread counters or feed state downstream, or whether re-marking an already-unread entry errors — all relevant for a mutation 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?
A single short sentence with zero filler, and the operation is front-loaded. It is under-specified rather than wasteful; the brevity is appropriate but extremely sparse.
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?
An output schema exists, so return values need not be explained, and the single parameter is fully described in the schema. What is missing is any behavioral context for a state-mutating tool with no annotations — enough to be minimally viable, not 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?
Schema description coverage is 100% for the single entry_id parameter, so the schema already documents it (type, minimum). The description adds no format, range, or sourcing detail beyond the schema, making 3 the correct 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?
States a specific verb ('Mark') and resource ('an entry') with the target state ('unread'), which clearly distinguishes it from the sibling mark_read_tool. However, it never names or contrasts with that inverse sibling, so an agent gets no explicit routing help beyond the tool name itself.
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 on when to use this versus mark_read_tool or read_entry_tool, and no mention of preconditions such as the entry needing to exist. The agent must infer the use case entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_entry_toolRead Entry ToolA
Get full content of an entry (auto-marks as read).
| Name | Required | Description | Default |
|---|---|---|---|
| entry_id | Yes | Entry ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it discloses the single most important non-obvious trait: reading auto-marks the entry as read, a mutation side effect overlapping with mark_read_tool. It omits auth requirements, error behavior for missing/invalid IDs, and whether the mark is reversible.
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?
A single short sentence with zero waste, front-loading the primary action and appending the side effect in a parenthetical. Nothing is padded or restated.
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?
An output schema exists, so return values need no explanation, and the description covers the key side effect. For a one-parameter read tool the coverage is nearly sufficient, with only error/permission behavior left unstated.
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?
Only one parameter exists and schema coverage is 100%, so the baseline is 3. The schema documents entry_id as an integer with a minimum of 1, and the description adds nothing further about ID format or where to obtain it.
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?
States a specific verb and resource ('Get full content of an entry'), which implicitly distinguishes it from list_entries_tool and search_entries_tool by its single-entry full-content scope. It does not explicitly name siblings, so an agent must infer the boundary from the sibling list.
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 parenthetical hints at a side effect but gives no explicit when-to-use guidance versus list_entries_tool or search_entries_tool, nor when-not to call it if the agent only wants to preview an entry. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_feeds_toolRefresh Feeds ToolA
Crawl feed sources over the network for new content. Slow — takes 30-60s for all feeds.
Prefer the systemd timer for background updates. Use list_entries to read cached content.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | No | Specific feed ID to refresh (optional, refreshes all if omitted) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the key behavioral traits: network activity ('over the network') and a latency warning ('Slow — takes 30-60s for all feeds'). It doesn't mention whether it blocks, is idempotent, or what errors occur on failure, but the performance profile is well surfaced for a no-annotation 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?
Three short sentences, front-loaded with the action and immediately followed by the latency caveat and routing guidance. Every sentence earns its place with no waste.
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?
An output schema exists so return values need not be explained. For a single-param, no-annotation tool with a clear latency profile and explicit sibling routing, the description is nearly complete; minor gaps include failure behavior and whether it deduplicates against existing entries.
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?
Schema coverage is 100%, so the parameter's meaning (optional feed_id, refreshes all if omitted) is already fully documented in the schema. The description adds no syntax or edge-case detail beyond the schema baseline, making 3 the appropriate score.
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?
States a specific verb+resource: 'Crawl feed sources over the network for new content.' Clearly distinguishes from siblings like list_entries (reading cached content) and add_feed_tool (adding a source). An agent knows exactly what this does.
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?
Explicitly tells when to prefer alternatives: 'Prefer the systemd timer for background updates' and 'Use list_entries to read cached content.' Names both the preferred mechanism and a specific sibling tool for the read path, which is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_category_toolRename Category ToolC
Rename a category.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New name | |
| category_id | Yes | Category ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Rename' implies a mutation, but the description says nothing about required permissions, whether renaming is reversible, how name collisions are handled, or any side effects on feeds assigned to the category.
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 single short sentence is front-loaded and free of waste, but its brevity reflects under-specification rather than disciplined conciseness. There is no structural content beyond a four-word restatement of the title.
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?
An output schema exists, so return values need not be explained, and both parameters are schema-documented. However, for a mutation tool with zero annotations, the description leaves the entire behavioral profile (permissions, reversibility, collision behavior) undisclosed, which is a substantial gap.
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?
Schema description coverage is 100%, with both category_id and name documented in the schema, so the baseline is 3. The description adds no meaning beyond the schema (it does not clarify name constraints or the ID's origin), but it is not required to.
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 states a specific verb and resource ('Rename a category'), which is minimally informative, but it essentially restates the tool title and name verbatim. It does nothing to distinguish this tool from siblings like create_category_tool, delete_category_tool, or list_categories_tool.
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 given on when to use this tool versus the sibling category tools, nor any prerequisites. The agent must infer usage entirely from the name and the surrounding tool list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_entries_toolSearch Entries ToolBRead-only
Full-text search across entry titles and content.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (1-500, default: 50) | |
| query | Yes | Search query (FTS5 syntax supported) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the useful behavioral detail that the search spans titles and content, but says nothing about result ordering, ranking, or how the limit interacts with total matches.
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?
A single front-loaded sentence with zero filler; the scope constraint (titles and content) comes immediately after the verb. Nothing is wasted or buried.
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?
An output schema exists, so return values need no explanation, and the readOnlyHint covers safety. For a search tool, though, the description omits ranking/ordering behavior and the relationship between the limit and total result count, which an agent calling this repeatedly would benefit from knowing.
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?
Schema description coverage is 100% – both parameters are documented in the schema, including FTS5 syntax support and the 1-500 limit range. The description adds no syntax, format, or default information beyond what the schema already provides, so the baseline 3 applies.
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?
States a specific verb+resource (full-text search across entries) and narrows the searchable fields to titles and content, which is more than the name alone conveys. It does not, however, differentiate itself from siblings like list_entries_tool or read_entry_tool, so an agent must infer the distinction from the verb 'search'.
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 when-to-use, when-not, or alternative-tool guidance is given. The description never mentions list_entries_tool (enumeration) or read_entry_tool (fetch a single entry), leaving the agent to infer routing from the name alone.
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.
10 tool updates
v0.2.2- Changed
delete_category_tool1 field changed- added
Input schema / properties / category_id / minimumAdded value: +1
- Changed
delete_feed_tool1 field changed- added
Input schema / properties / feed_id / minimumAdded value: +1
- Changed
get_feed_tool1 field changed- added
Input schema / properties / feed_id / minimumAdded value: +1
- Changed
list_entries_tool5 fields changed- changed
Input schema / properties / category_id / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / feed_id / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - added
Input schema / properties / published_afterAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Inclusive lower bound, ISO-8601 date or datetime\n(e.g. \"2026-08-23\" or \"2026-08-23T00:00:00Z\")." +} - added
Input schema / properties / published_beforeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Inclusive upper bound, ISO-8601 date or datetime." +} - added
Input schema / properties / since_daysAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Only entries dated within the last N days (1-366).\nMutually exclusive with published_after/published_before." +}
- Changed
list_feeds_tool1 field changed- changed
Input schema / properties / category_id / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +]
- Changed
mark_read_tool2 fields changed- changed
Input schema / properties / entry_id / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / feed_id / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +]
- Changed
mark_unread_tool1 field changed- added
Input schema / properties / entry_id / minimumAdded value: +1
- Changed
read_entry_tool1 field changed- added
Input schema / properties / entry_id / minimumAdded value: +1
- Changed
refresh_feeds_tool1 field changed- changed
Input schema / properties / feed_id / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +]
- Changed
rename_category_tool1 field changed- added
Input schema / properties / category_id / minimumAdded value: +1
17 tool updates
v0.1.3- First observed
add_feed_tool - First observed
create_category_tool - First observed
delete_category_tool - First observed
delete_feed_tool - First observed
export_opml_tool - First observed
get_feed_tool - First observed
get_stats_tool - First observed
import_opml_tool - First observed
list_categories_tool - First observed
list_entries_tool - First observed
list_feeds_tool - First observed
mark_read_tool - First observed
mark_unread_tool - First observed
read_entry_tool - First observed
refresh_feeds_tool - First observed
rename_category_tool - First observed
search_entries_tool
TDQS
Scored across 17 tools
Most tools target distinct resources and actions (feeds, entries, categories each have clear verbs). Minor overlap exists between read_entry_tool (which auto-marks as read) and mark_read_tool, and between list_entries_tool and search_entries_tool, but the descriptions clarify the boundaries well enough.
Every tool follows a consistent snake_case verb_noun_tool pattern (list_feeds_tool, add_feed_tool, delete_category_tool, etc.). The convention is uniform across all 17 tools with no style mixing.
17 tools is slightly above the ideal range but each earns its place across three resource domains (feeds, entries, categories) plus OPML import/export and refresh. No redundant or filler tools are present.
Core lifecycle is well covered: feeds (list/get/add/delete/refresh/OPML), entries (list/search/read/mark read/unread), and categories (list/create/rename/delete). Gaps include updating an existing feed (rename or move category) and bulk mark-all-read, but these are minor workarounds.
Maintenance
Related MCP Connectors
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Reddit MCP — public Reddit data via the Atom/RSS feeds.
Your IMAP mailbox as an MCP server: read, search and (if you allow it) organize mail. Open source.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP RSS is a Model Context Protocol (MCP) server for interacting with RSS feeds6 npm27MIT
- AlicenseBqualityCmaintenanceMCP server for fetching, parsing, and managing RSS feeds. Features Fetch and parse RSS/Atom feeds In-memory caching with TTL Batch fetching of multiple feeds Monitor feeds for new items Search content across multiple feeds Extract and format feed content645 npm12Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server for interacting with FreshRSS via the Google Reader API, enabling subscription management, content reading, and item operations.2MIT
- AlicenseAqualityCmaintenanceAn MCP server for managing and querying RSS/news feeds, enabling real-time fetching, searching, and retrieval of feed items.510 npm1MIT