ttrss-mcp
Enables interaction with a Tiny Tiny RSS (tt-rss) instance, allowing for the management of RSS feeds and categories, retrieval of headlines and full article content, status updates for articles (read, starred, published), and the generation of automated daily summary reports.
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., "@ttrss-mcpGenerate a daily report of 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.
ttrss-mcp
tt-rss MCP (Model Context Protocol),允许通过 AI 助手读写 Tiny Tiny RSS 订阅源。
官方接口文档:https://github.com/tt-rss/tt-rss/wiki/Api-Reference
使用方法
本服务通过 stdio 传输协议运行,AI 客户端直接启动进程通信。
{
"mcpServers": {
"tt-rss": {
"command": "npx",
"args": ["ttrss-mcp"],
"env": {
"TT_RSS_URL": "https://rss.example.com/tt-rss",
"TT_RSS_SID": "your-session-id"
}
}
}
}Related MCP server: inoreader-mcp
MCP 工具列表
订阅源管理
工具 | 说明 |
| 获取分类列表 |
| 获取订阅源列表 |
| 订阅新 RSS 源 |
| 取消订阅 |
文章管理
工具 | 说明 |
| 获取文章标题列表 (支持过滤/分页) |
| 获取文章全文 |
| 获取未读数量 |
| 更新文章状态 (星标/已读/发布/笔记) |
| 标记源为已读 |
| 分享到已发布 |
| 搜索文章 |
标签管理
工具 | 说明 |
| 获取标签列表 |
| 设置/移除文章标签 |
系统与日报
工具 | 说明 |
| 获取服务器配置 |
| 生成日报 (按源分组的文章汇总) |
项目结构
ttrss-mcp/
├── src/
│ ├── index.ts # MCP Server 入口 (stdio)
│ ├── ttrss-client.ts # tt-rss API 客户端封装
│ ├── types.ts # TypeScript 类型定义
│ └── tools/
│ ├── feeds.ts # 订阅源管理工具
│ ├── articles.ts # 文章读写工具
│ ├── labels.ts # 标签管理工具
│ └── report.ts # 日报生成工具
├── .env.example
├── package.json
└── tsconfig.jsonLicense
MIT
Available Tools
15 toolscatchup_feedC
将订阅源或分类中的所有文章标记为已读。mode 可选: all (全部), 1day, 1week, 2week
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | 源或分类 ID | |
| is_cat | No | feed_id 是否为分类 ID | |
| mode | No | 标记范围 | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It mentions the 'mode' parameter for time ranges but doesn't disclose critical traits like whether this action is reversible, if it requires specific permissions, or how it handles errors. This is inadequate 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?
The description is brief and front-loaded with the main purpose, followed by a concise note on the 'mode' parameter. However, the second sentence could be integrated more smoothly, and it lacks structural elements like bullet points for clarity.
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 mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens after marking articles as read (e.g., success response, error cases), or address potential side effects like updating unread counts, which sibling tools like 'get_unread_count' might rely on.
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 the schema already documents all parameters well. The description adds minimal value by listing the 'mode' enum values, but doesn't provide additional context like default behavior or interaction between parameters beyond what the schema states.
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 as read') and target ('all articles in a feed or category'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'update_article' which might also affect article read status, leaving room for ambiguity.
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. For example, it doesn't mention whether this is for bulk operations compared to 'update_article' for individual articles, or if there are prerequisites like authentication needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_daily_reportC
生成日报:汇总近期文章,按分类和订阅源分组输出。默认获取未读文章,可指定时间范围。
| Name | Required | Description | Default |
|---|---|---|---|
| hours | No | 获取最近 N 小时内的文章,默认 24 | |
| limit | No | 最多获取的文章数量 | |
| view_mode | No | 过滤模式 | all_articles |
| include_content | No | 是否包含文章摘要 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the default behavior (fetches unread articles) and that time range can be specified, but doesn't describe important traits like whether this is a read-only operation, what the output format looks like (grouped by category/feed), potential rate limits, or any side effects. For a tool with 4 parameters and no annotations, this leaves significant gaps in understanding how it behaves.
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 appropriately concise with two sentences that efficiently convey the core functionality. The first sentence states the main purpose, the second adds key behavioral details. No wasted words or redundant information. However, it could be slightly more front-loaded with the most critical 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?
Given the tool's complexity (4 parameters, no annotations, no output schema), the description is insufficiently complete. It doesn't explain the output format (how articles are grouped by category/feed), doesn't mention whether this is a read-only operation, and provides minimal guidance on when to use it versus sibling tools. For a report generation tool with multiple parameters, more contextual information would be helpful for an AI agent.
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 the schema already documents all 4 parameters thoroughly. The description adds minimal value beyond the schema: it implies time range filtering ('可指定时间范围' - time range can be specified) which relates to the 'hours' parameter, and mentions default unread article fetching which relates to 'view_mode'. However, it doesn't provide additional semantic context beyond what's already in the parameter descriptions.
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 tool's purpose: '生成日报:汇总近期文章,按分类和订阅源分组输出' (Generate daily report: summarize recent articles, grouped by category and feed). It specifies the verb ('生成' - generate) and resource ('日报' - daily report) with details about grouping. However, it doesn't explicitly distinguish this from sibling tools like 'search_articles' or 'get_headlines' which might also retrieve articles.
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 minimal usage guidance: '默认获取未读文章,可指定时间范围' (By default fetches unread articles, time range can be specified). It mentions the default behavior but doesn't explain when to use this tool versus alternatives like 'search_articles' for specific queries or 'get_headlines' for simpler listings. No explicit when-not-to-use guidance or comparison with siblings is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_articleB
获取一篇或多篇文章的完整内容 (含正文)。支持逗号分隔的多个 ID。
| Name | Required | Description | Default |
|---|---|---|---|
| article_id | Yes | 文章 ID,支持逗号分隔的多个 ID (如 '123,456') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but provides minimal behavioral context. It mentions the tool retrieves '完整内容 (含正文)' (full content including body) and supports multiple IDs, but doesn't disclose error handling, authentication needs, rate limits, pagination, or what happens when invalid IDs are provided. For a read operation with zero annotation coverage, this is insufficient.
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, efficient sentence that front-loads the core purpose and includes the key capability (multiple ID support). Every word earns its place with zero redundancy or unnecessary elaboration.
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 well-documented parameter and no output schema, the description is minimally adequate. However, it lacks details about return format (e.g., structured data vs. raw text), error responses, or any behavioral nuances that would help an agent use it correctly. The absence of annotations increases the need for more 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?
Schema description coverage is 100%, so the schema already fully documents the single parameter 'article_id' with its format and multi-ID support. The description adds no additional parameter semantics beyond what's in the schema, meeting the baseline for high 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 verb ('获取' meaning 'get') and resource ('文章' meaning 'articles'), specifying it retrieves full content including body text. It distinguishes from siblings like 'get_headlines' (likely summaries) and 'search_articles' (search-based retrieval), though it doesn't explicitly name these 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?
The description implies usage when full article content is needed (vs. headlines or summaries), and mentions support for multiple IDs via comma separation. However, it doesn't provide explicit guidance on when to use this tool versus alternatives like 'search_articles' or 'get_headlines', nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_categoriesA
获取 tt-rss 的分类列表,包含各分类的未读数。可选只返回有未读文章的分类。
| Name | Required | Description | Default |
|---|---|---|---|
| unread_only | No | 仅返回有未读文章的分类 | |
| enable_nested | No | 嵌套模式,只返回顶级分类 | |
| include_empty | No | 包含空分类 |
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 adds some context by mentioning the optional filtering for categories with unread articles, but does not cover other behavioral aspects such as authentication needs, rate limits, error handling, or the format of the returned data. This leaves gaps in understanding how the tool behaves beyond its basic function.
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 concise and front-loaded, consisting of a single sentence that efficiently conveys the tool's purpose and key optional feature. Every word earns its place, with no redundant or unnecessary information, making it easy for an AI agent to parse quickly.
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 moderate complexity (3 parameters, no annotations, no output schema), the description is somewhat complete but has gaps. It covers the purpose and hints at one parameter's use, but lacks details on behavioral traits, output format, and broader context. This is adequate for a read-only list tool but could be more informative to fully guide an agent.
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 the schema already documents all three parameters thoroughly. The description adds minimal value by implying the 'unread_only' parameter's functionality ('可选只返回有未读文章的分类' meaning 'optionally return only categories with unread articles'), but does not provide additional semantics beyond what the schema offers. This meets the baseline for high 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 tool's purpose with a specific verb ('获取' meaning 'get') and resource ('分类列表' meaning 'category list'), and explicitly distinguishes it from siblings by mentioning '未读数' (unread counts) which no other tool in the sibling list addresses. It provides a complete picture of what the tool 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?
The description provides clear context on when to use this tool by specifying '获取 tt-rss 的分类列表,包含各分类的未读数' (get tt-rss category list including unread counts for each category), which helps differentiate it from other list-related tools like get_feeds or get_headlines. However, it does not explicitly state when not to use it or name specific alternatives, which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_configB
获取 tt-rss 服务器配置信息 (守护进程状态、订阅数等)
| Name | Required | Description | Default |
|---|---|---|---|
No 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. It states this is a read operation ('get'), implying it's non-destructive, but doesn't clarify permissions, rate limits, or response format. For a tool that likely returns system-level data, more context on what 'configuration information' entails and any access restrictions would be helpful.
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, efficient sentence that directly states the tool's purpose with relevant examples ('守护进程状态、订阅数等'). It's front-loaded with the core action and resource, with no wasted words 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?
Given the tool has no parameters, no annotations, and no output schema, the description is minimally adequate. It specifies what information is retrieved but lacks details on the return format, error conditions, or behavioral traits. For a simple read-only tool with zero inputs, this is acceptable but leaves gaps in understanding the full context of 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 has 0 parameters, and schema description coverage is 100% (as there are no parameters to describe). The description doesn't need to add parameter semantics, so a baseline score of 4 is appropriate. It implicitly confirms no inputs are required by not mentioning any.
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 tool's purpose: '获取 tt-rss 服务器配置信息 (守护进程状态、订阅数等)' translates to 'Get tt-rss server configuration information (daemon status, subscription count, etc.)'. This specifies the verb ('get') and resource ('tt-rss server configuration information') with examples of what information is included. It doesn't explicitly differentiate from siblings like 'get_feeds' or 'get_categories', but the resource type is distinct enough to imply differentiation.
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. It doesn't mention prerequisites, timing, or context for usage. For example, it doesn't specify if this is for monitoring, troubleshooting, or general information retrieval, nor does it contrast with other 'get_' tools that retrieve specific data subsets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feedsA
获取 tt-rss 的订阅源列表。可按分类过滤,支持分页。特殊分类 ID: -1=特殊, -2=标签, -3=所有(不含虚拟), -4=所有(含虚拟), 0=未分类
| Name | Required | Description | Default |
|---|---|---|---|
| cat_id | No | 分类 ID,不传则返回全部 | |
| unread_only | No | 仅返回有未读文章的源 | |
| limit | No | 返回数量限制 | |
| offset | No | 跳过前 N 条 | |
| include_nested | No | 包含子分类中的源 |
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 adds useful context such as pagination support and special category IDs, which are behavioral traits not covered elsewhere. However, it lacks details on permissions, rate limits, error handling, or response format, leaving gaps for a tool with 5 parameters and no output 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?
The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by key features (filtering, pagination) and critical details (special IDs). Every sentence earns its place with no redundant or vague information, making it efficient and easy to parse.
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 complexity (5 parameters, no output schema, no annotations), the description is somewhat complete but has gaps. It covers purpose, filtering, and pagination well, but lacks details on authentication, error cases, or return values, which are important for a read operation in a feed management context. It's adequate but not fully comprehensive.
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 description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds value by explaining special category IDs (-1 to -4, 0) and implying pagination (via '支持分页'), which provides semantic context beyond the schema's technical descriptions. Since no parameters are required, this compensates well.
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 ('获取' meaning 'get') and resource ('tt-rss 的订阅源列表' meaning 'tt-rss feed list'), making the purpose specific. It distinguishes from siblings by focusing on feed retrieval rather than articles (get_article, get_headlines), categories (get_categories), or feed management (subscribe_feed, unsubscribe_feed).
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 clear context for usage by mentioning filtering by category and pagination support, which helps understand when to apply these parameters. However, it does not explicitly state when to use this tool versus alternatives like get_categories (for category lists) or get_headlines (for article lists), nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_headlinesB
获取文章标题列表。特殊 feed_id: -4=全部, -3=最新, -2=已发布, -1=星标, 0=已归档。可按 view_mode 过滤未读/星标等。
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | No | 源 ID。-4=全部, -3=最新, -2=已发布, -1=星标, 0=已归档, 正数=具体源 | |
| limit | No | 返回数量限制 (最大 200) | |
| skip | No | 跳过前 N 篇 | |
| view_mode | No | 过滤模式 | unread |
| is_cat | No | feed_id 是否为分类 ID | |
| show_excerpt | No | 返回文章摘要 | |
| show_content | No | 返回文章全文 (较大) | |
| include_attachments | No | 包含附件信息 | |
| order_by | No | 排序方式: 空=默认, feed_dates=最新优先, date_reverse=最旧优先 | |
| since_id | No | 只返回 ID 大于此值的文章 |
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 mentions some filtering capabilities (feed_id special values, view_mode) but doesn't describe important behavioral traits like whether this is a read-only operation, potential rate limits, authentication requirements, pagination behavior beyond skip/limit, or what happens with invalid parameters. The description adds some context but leaves significant gaps for a tool with 10 parameters.
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 appropriately concise with two sentences that directly address the tool's functionality. The first sentence states the core purpose, and the second provides key parameter context. There's no wasted verbiage, though it could be slightly better structured with clearer separation of concepts.
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 10 parameters, no annotations, and no output schema, the description is insufficiently complete. It doesn't explain the return format, error conditions, or how parameters interact (e.g., what happens when feed_id and view_mode conflict). While it mentions some filtering capabilities, it doesn't provide enough context for an agent to understand the full behavioral scope of this list-retrieval 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 description adds minimal parameter semantics beyond what the schema provides. It mentions special feed_id values (-4 through 0) which are already documented in the schema's description field, and mentions view_mode filtering which is also in the schema. With 100% schema description coverage, the baseline is 3, and the description doesn't significantly enhance understanding of parameter meanings or interactions.
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 tool's purpose as '获取文章标题列表' (get article headline list), which is a specific verb+resource combination. It distinguishes itself from siblings like get_article (which retrieves full content) and search_articles (which searches). However, it doesn't explicitly differentiate from get_feeds or get_categories, which might retrieve different types of lists.
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 some implied usage context by mentioning special feed_id values and view_mode filtering, suggesting this is for retrieving filtered article lists. However, it doesn't explicitly state when to use this tool versus alternatives like search_articles or get_article, nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_labelsB
获取所有已配置的标签列表。可传入 article_id 查看该文章是否有某标签。
| Name | Required | Description | Default |
|---|---|---|---|
| article_id | No | 指定文章 ID 时,返回结果中 checked 表示该文章是否有此标签 |
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 describes the basic read operation and the effect of the article_id parameter, but doesn't disclose important behavioral traits like whether this requires authentication, rate limits, error conditions, pagination, or what format the label list returns. For a tool with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.
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 appropriately concise with two sentences that each serve a clear purpose. The first sentence states the core function, and the second explains the optional parameter usage. There's no wasted text or redundancy. However, it could be slightly more structured by separating the core purpose from parameter guidance more explicitly.
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 moderate complexity (1 optional parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and parameter usage but lacks important contextual information about authentication requirements, return format, error handling, and how this tool relates to sibling operations. Without annotations or output schema, the description should do more to compensate for these 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?
The schema description coverage is 100% (the single parameter has a clear description), so the baseline is 3. The description adds some value by explaining the semantic effect of the article_id parameter ('查看该文章是否有某标签' - check if the article has a certain label), which provides context beyond the schema's technical description. However, it doesn't add significant additional parameter semantics beyond what the schema already documents.
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 tool's purpose: '获取所有已配置的标签列表' (get all configured labels list). It specifies the verb ('获取' - get) and resource ('标签列表' - labels list), making the basic function clear. However, it doesn't explicitly differentiate this from sibling tools like 'set_article_label' or explain how it differs from other list operations like 'get_categories' or 'get_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?
The description provides some usage context by explaining when to use the optional parameter: '可传入 article_id 查看该文章是否有某标签' (can pass article_id to check if the article has a certain label). This implies usage for checking label assignments. However, it doesn't provide explicit guidance on when to use this tool versus alternatives like 'set_article_label' or when not to use it, nor does it mention prerequisites or dependencies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unread_countB
获取当前未读文章总数
| Name | Required | Description | Default |
|---|---|---|---|
No 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. It only states what the tool does ('获取当前未读文章总数') without explaining how it works—e.g., whether it counts across all feeds or specific categories, if it's cached or real-time, or what permissions are required. This leaves significant gaps in understanding its behavior.
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: '获取当前未读文章总数'. It's front-loaded with the core purpose, has zero waste, and is appropriately sized for a simple tool with no parameters. Every word earns its place by directly conveying the tool's function.
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 simplicity (0 parameters, no output schema, no annotations), the description is minimally complete. It states the purpose but lacks context on usage, behavior, or output format. For a read-only tool with no parameters, this might suffice, but it doesn't fully compensate for the absence of annotations or output schema, leaving some ambiguity.
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 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here. A baseline of 4 is given as it adequately handles the lack of parameters without introducing confusion.
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 tool's purpose: '获取当前未读文章总数' (Get the current total number of unread articles). It specifies the verb '获取' (get) and resource '未读文章总数' (total unread articles). However, it doesn't explicitly differentiate from siblings like 'get_article' or 'search_articles', which focus on individual articles or searches rather than aggregate 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?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention scenarios like checking unread counts before fetching articles or how it relates to siblings such as 'get_article' or 'search_articles'. Without context, an agent might misuse it or overlook better options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_articlesC
在文章中搜索关键词。search_mode: all_feeds=全部源, this_feed=当前源, this_cat=当前分类
| Name | Required | Description | Default |
|---|---|---|---|
| search | Yes | 搜索关键词 | |
| feed_id | No | 在哪个源中搜索,-4=全部 | |
| search_mode | No | 搜索范围 | all_feeds |
| limit | No | 返回数量限制 | |
| view_mode | No | 过滤模式 | all_articles |
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 mentions search_mode options without explaining critical behaviors like pagination, rate limits, authentication requirements, error handling, or what happens when no results are found. For a search tool with 5 parameters, this leaves significant gaps in understanding how the tool behaves in practice.
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 brief but could be better structured. The first sentence clearly states the purpose, but the second sentence is a parenthetical list of search_mode options that might be better integrated. While concise, it doesn't optimally front-load the most critical information about tool 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?
For a search tool with 5 parameters and no output schema, the description is insufficiently complete. It doesn't explain what the tool returns (e.g., article metadata, full text, relevance scoring), how results are ordered, or whether there are limitations like maximum search terms. Without annotations or output schema, users lack crucial information about the tool's operation and results.
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 the schema already documents all parameters thoroughly. The description adds minimal value by listing search_mode enum values with Chinese translations, but doesn't provide additional semantic context beyond what's in the schema. This meets the baseline expectation when schema coverage is complete.
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 tool's purpose: '在文章中搜索关键词' (search for keywords in articles). It specifies the verb (搜索/search) and resource (文章/articles), making the intent unambiguous. However, it doesn't explicitly differentiate this tool from potential siblings like 'get_headlines' or 'get_article', which might also retrieve article content.
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. It lists search_mode options but doesn't explain scenarios where one would choose this tool over other article-related tools like 'get_headlines' or 'get_article'. There's no mention of prerequisites, context, or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_article_labelC
为文章设置或移除标签
| Name | Required | Description | Default |
|---|---|---|---|
| article_ids | Yes | 文章 ID 列表,逗号分隔 (如 '123,456') | |
| label_id | Yes | 标签 ID (从 get_labels 获取) | |
| assign | Yes | true=添加标签, false=移除标签 |
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 states the action (set/remove labels) but lacks critical details: whether this is a mutation (implied but not explicit), permission requirements, rate limits, or what happens on success/failure. This is inadequate for a tool that modifies data.
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, efficient sentence in Chinese that directly states the tool's function without any fluff. It's appropriately sized and front-loaded, making it easy to parse quickly.
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 mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain the return value, error conditions, or behavioral nuances (e.g., idempotency). Given the complexity of modifying article labels, more context is needed for safe and effective 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?
Schema description coverage is 100%, so the schema fully documents all three parameters. The description adds no additional meaning beyond what the schema provides (e.g., it doesn't explain format constraints or relationships between parameters), meeting the baseline for high 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 verb ('设置或移除' - set or remove) and resource ('标签' - label) for articles, making the purpose understandable. However, it doesn't differentiate this tool from potential alternatives like 'update_article' which might also handle labels, so it doesn't reach the highest score.
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. It doesn't mention prerequisites (e.g., needing to get labels first), nor does it clarify if this is for bulk operations or how it relates to siblings like 'update_article' or 'get_labels'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscribe_feedC
订阅新的 RSS 源
| Name | Required | Description | Default |
|---|---|---|---|
| feed_url | Yes | RSS 源的 URL | |
| category_id | No | 放入的分类 ID,默认 0 (未分类) | |
| login | No | 源需要认证时的用户名 | |
| password | No | 源需要认证时的密码 |
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 states the action ('subscribe') but doesn't explain what happens after subscription (e.g., whether feeds are fetched immediately, if errors occur for invalid URLs, or if it returns a confirmation). For a mutation tool with zero annotation coverage, this is a significant gap in 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, efficient sentence in Chinese ('订阅新的 RSS 源'), which directly conveys the core purpose without any wasted words. It's front-loaded and appropriately sized for the tool's function.
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 has no annotations, no output schema, and involves mutation (subscription), the description is incomplete. It doesn't cover behavioral aspects like error handling, return values, or side effects (e.g., how the feed integrates with other tools like 'get_feeds'). For a 4-parameter tool with this complexity, more context is 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 description coverage is 100%, so the schema fully documents all parameters (feed_url, category_id, login, password). The description adds no additional meaning beyond the schema, such as explaining parameter interactions (e.g., login/password are only needed for authenticated feeds) or usage examples. Baseline 3 is appropriate when the schema does the heavy lifting.
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 ('订阅' meaning 'subscribe') and the resource ('新的 RSS 源' meaning 'new RSS feed'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'unsubscribe_feed' or 'get_feeds', but the verb 'subscribe' versus 'unsubscribe' or 'get' provides inherent differentiation.
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 like 'get_feeds' (to list existing feeds) or 'unsubscribe_feed' (to remove feeds). It also doesn't mention prerequisites, such as needing an existing feed URL or authentication details for protected feeds, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unsubscribe_feedC
取消订阅指定的 RSS 源
| Name | Required | Description | Default |
|---|---|---|---|
| feed_id | Yes | 要取消订阅的源 ID |
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 states the action ('取消订阅') but doesn't describe effects (e.g., whether it's reversible, if it requires specific permissions, or what happens to associated data like articles). For a mutation tool with zero annotation coverage, this is a significant gap in 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, efficient sentence in Chinese that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly.
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 complexity as a mutation operation, lack of annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like side effects, error conditions, or return values, which are crucial for an agent to use it correctly.
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 description coverage is 100%, with the single parameter 'feed_id' documented as '要取消订阅的源 ID' (ID of the feed to unsubscribe). The description doesn't add any meaning beyond this, such as format examples or constraints, so it meets the baseline for high 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 ('取消订阅' meaning 'unsubscribe') and the resource ('指定的 RSS 源' meaning 'specified RSS feed'), making the purpose unambiguous. It doesn't explicitly differentiate from sibling tools like 'subscribe_feed' or 'get_feeds', but the verb clearly indicates a write operation versus read operations.
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. It doesn't mention prerequisites (e.g., needing an existing subscription), exclusions, or comparisons to sibling tools like 'subscribe_feed' or 'get_feeds', leaving usage context 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.
update_articleC
更新文章状态。field: 0=星标, 1=已发布, 2=未读, 3=笔记。mode: 0=取消, 1=设置, 2=切换。
| Name | Required | Description | Default |
|---|---|---|---|
| article_ids | Yes | 文章 ID 列表,逗号分隔 (如 '123,456') | |
| field | Yes | 操作字段: 0=星标, 1=已发布, 2=未读, 3=笔记 | |
| mode | Yes | 操作模式: 0=取消, 1=设置, 2=切换 | |
| data | No | 当 field=3 (笔记) 时,笔记内容 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the action ('更新文章状态') and parameter meanings, but lacks behavioral traits like permissions needed, whether changes are reversible, rate limits, or what happens on success/failure. For a mutation tool with zero annotation coverage, this is a significant gap in 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 extremely concise and front-loaded, with two sentences that directly explain the tool's purpose and parameter meanings. Every sentence earns its place by providing essential information without waste, making it highly efficient in structure.
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 no annotations and no output schema, the description is incomplete for a mutation tool. It covers basic purpose and parameters but lacks behavioral context, error handling, or return values. For a tool with 4 parameters and potential side effects, more completeness is needed to guide effective 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?
Schema description coverage is 100%, providing detailed parameter descriptions. The description adds minimal value by listing field and mode mappings (e.g., 'field: 0=星标'), which are already covered in the schema. It doesn't add syntax, format, or usage nuances beyond the schema, so 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 clearly states the verb ('更新' meaning 'update') and resource ('文章状态' meaning 'article status'), specifying it's for updating article status. It distinguishes from siblings like get_article (read) or set_article_label (label-specific), but doesn't explicitly contrast with all siblings. The purpose is specific but lacks full sibling differentiation.
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. It doesn't mention prerequisites, context, or exclusions, such as when to use set_article_label instead for labels or share_to_published for publishing. Usage is implied only through parameter descriptions, with no explicit when/when-not statements.
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.
15 tool updates
v1.0.0- First observed
catchup_feed - First observed
generate_daily_report - First observed
get_article - First observed
get_categories - First observed
get_config - First observed
get_feeds - First observed
get_headlines - First observed
get_labels - First observed
get_unread_count - First observed
search_articles - First observed
set_article_label - First observed
share_to_published - First observed
subscribe_feed - First observed
unsubscribe_feed - First observed
update_article
TDQS
Scored across 15 tools
Each tool has a distinct purpose targeting specific resources and actions in the tt-rss RSS reader domain, such as managing feeds (subscribe_feed, unsubscribe_feed), handling articles (get_article, update_article), and generating reports (generate_daily_report). No tools appear to overlap in functionality, making it clear for an agent to select the right one.
All tool names follow a consistent verb_noun pattern in snake_case, such as get_article, set_article_label, and generate_daily_report. This uniformity enhances readability and predictability across the tool set.
With 15 tools, the server is well-scoped for managing an RSS reader, covering essential operations like feed management, article retrieval, labeling, and reporting. Each tool serves a clear purpose without bloat or redundancy.
The tool set provides comprehensive coverage for the tt-rss domain, including CRUD-like operations for feeds and articles, status updates, labeling, search, and reporting. There are no obvious gaps; agents can perform full lifecycle management of RSS content.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Official MCP server for subfeed.app — the cloud for agents. 15+ tools for AI agents to register, build, and deploy other agents. Zero human required. Start here: subfeed.app/skill.md
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that fetches RSS feeds and shares them with LLMs, allowing AI assistants to access and present the latest news and articles from configured feeds.19-
- AlicenseAqualityBmaintenanceAn MCP server for the Inoreader RSS reader API that allows users to triage articles, analyze feed health, and manage subscriptions. It enables reading content, organizing folders, and performing batch tagging or status updates through natural language.1261MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides RSS feed management and LLM-powered article evaluation, enabling AI agents to filter and assess content value.MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that fetches and filters AI-related news from 20+ RSS feeds with scheduled notifications and email digests.1-