fanfou-mcp
Provides tools for interacting with Fanfou (饭否) social network, including timeline retrieval, user info, status management, publishing messages and photos, managing favorites and friendships, and OAuth token generation.
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., "@fanfou-mcpShow my home timeline"
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.
title: 饭否 MCP 服务器 emoji: 🍚 colorFrom: blue colorTo: purple sdk: gradio sdk_version: "5.36.2" app_file: app.py pinned: false
饭否 MCP 服务器
基于 FastMCP 构建的饭否(Fanfou)MCP 服务器,提供饭否相关的工具和服务。
Related MCP server: DDG MCP Server
功能特性
🛠️ 基于 FastMCP 框架构建
🔧 提供饭否相关的工具函数
📡 支持 MCP (Model Context Protocol) 协议
🌐 支持 SSE (Server-Sent Events) 方式连接
🐍 使用 Python 3.11+ 开发
演示效果
Claude 中使用效果:

Cursor 中使用效果:

快速开始
前提条件
Python 3.11+
uv 包管理器(用于
uvx命令)饭否账号和 API 密钥
客户端配置
MCP 配置
方式1:使用 SSE 方式(基于 Huggingface)
{
"mcpServers": {
"fanfou-mcp": {
"url": "https://kingcos-fanfou-mcp.hf.space/gradio_api/mcp/sse",
"headers": {
"X-Fanfou-Api-Key": "your_api_key_here",
"X-Fanfou-Api-Secret": "your_api_secret_here",
"X-Fanfou-OAuth-Token": "your_oauth_token_here",
"X-Fanfou-OAuth-Token-Secret": "your_oauth_token_secret_here"
}
}
}
}Huggingface 项目地址: https://huggingface.co/spaces/kingcos/fanfou-mcp
注意,首次登录可使用用户名密码,以获取 OAuth Token 与 OAuth-Token-Secret,例如:
{
"mcpServers": {
"fanfou-mcp": {
"url": "https://kingcos-fanfou-mcp.hf.space/gradio_api/mcp/sse",
"env": {
"X-Fanfou-Api-Key": "your_api_key_here",
"X-Fanfou-Api-Secret": "your_api_secret_here",
"X-Fanfou-Username": "your_username_here",
"X-Fanfou-Password": "your_password_here"
}
}
}
}方式2:使用 STDIO 方式
{
"mcpServers": {
"fanfou-mcp": {
"command": "uvx",
"args": ["fanfou-mcp"],
"env": {
"FANFOU_API_KEY": "your_api_key_here",
"FANFOU_API_SECRET": "your_api_secret_here",
"FANFOU_OAUTH_TOKEN": "your_oauth_token_here",
"FANFOU_OAUTH_TOKEN_SECRET": "your_oauth_token_secret_here"
}
}
}
}如果遇到导入错误,请使用强制更新版本:
{
"mcpServers": {
"fanfou-mcp": {
"command": "uvx",
"args": ["--force-reinstall", "fanfou-mcp"],
"env": {
"FANFOU_API_KEY": "your_api_key_here",
"FANFOU_API_SECRET": "your_api_secret_here",
"FANFOU_OAUTH_TOKEN": "your_oauth_token_here",
"FANFOU_OAUTH_TOKEN_SECRET": "your_oauth_token_secret_here"
}
}
}
}注意,首次登录可使用用户名密码,以获取 OAuth Token 与 OAuth-Token-Secret,例如:
{
"mcpServers": {
"fanfou-mcp": {
"command": "uvx",
"args": ["fanfou-mcp"],
"env": {
"FANFOU_API_KEY": "your_api_key_here",
"FANFOU_API_SECRET": "your_api_secret_here",
"FANFOU_USERNAME": "your_username_here",
"FANFOU_PASSWORD": "your_password_here"
}
}
}
}方式3:本地开发模式
{
"mcpServers": {
"fanfou-mcp": {
"command": "uv",
"args": ["--directory", "/path/to/your/fanfou-mcp", "run", "python", "main.py"],
"env": {
"FANFOU_API_KEY": "your_api_key_here",
"FANFOU_API_SECRET": "your_api_secret_here",
"FANFOU_OAUTH_TOKEN": "your_oauth_token_here",
"FANFOU_OAUTH_TOKEN_SECRET": "your_oauth_token_secret_here"
}
}
}
}配置说明:
推荐使用方式1:
uvx会自动从 PyPI 下载和运行最新版本,无需本地安装方式1(SSE):基于 Huggingface 部署的 Web 服务,通过 HTTP 头传递认证信息,支持多用户隔离
缓存问题:如果遇到导入错误,可能是
uvx缓存了旧版本,请在配置中将"args": ["fanfou-mcp"]改为"args": ["--force-reinstall", "fanfou-mcp"]来强制更新OAuth Token 方式:避免每次都需要登录,更安全便捷
首次使用:如果没有 OAuth Token,系统会自动生成并显示 OAuth Token,然后再切换
本地开发:如果你需要修改代码或调试,可以使用方式3
请将环境变量中的占位符替换为你的实际饭否 API 凭据
可用工具
本服务器提供以下工具:
认证相关
generate_oauth_token- 生成 OAuth Token
时间线相关
get_home_timeline- 获取首页时间线get_user_timeline- 获取用户时间线get_public_timeline- 获取公开时间线
用户和内容相关
get_user_info- 获取用户信息get_status_info- 获取饭否内容详情
互动相关
manage_favorite- 管理收藏状态manage_friendship- 管理关注状态
发布相关
publish_status- 发布文字内容publish_photo- 发布图片内容delete_status- 删除内容
详细的 API 文档请参考:API 文档
文档
许可证
本项目采用 MIT 许可证。详见 LICENSE 文件。
Available Tools
11 toolsdelete_statusA
删除饭否内容
调用饭否 API 的 /statuses/destroy.json 接口删除指定的饭否内容。 注意:只能删除自己发布的内容。
Args: status_id: 要删除的饭否内容的 ID confirm: 是否确认删除(二次确认参数)
Returns: 删除结果字典,包含: - 删除 ID: 被删除消息的 ID - 删除结果: 删除是否成功的描述信息 - 重要提示: 关于删除操作的提醒信息
或者确认信息字典,包含:
- 需要确认: 是否需要用户确认
- 内容预览: 要删除的内容预览
- 确认提示: 如何进行确认的说明| Name | Required | Description | Default |
|---|---|---|---|
| status_id | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the API endpoint, the delete action, the restriction to own content, and the confirm parameter for safety. It also describes return values, including a confirmation dictionary when not confirmed. This gives a transparent view of 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?
Description is organized with sections (overview, notes, Args, Returns). It is not overly verbose, though some redundancy exists. The structure helps readability, and every sentence adds 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 moderate complexity (2 params, output schema exists), the description covers purpose, restrictions, parameters, and return values. It provides sufficient information for an agent to use the tool correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must add meaning. It explains status_id as the ID of the status to delete and confirm as a secondary confirmation parameter. This adds some value, but the explanations are minimal and could benefit from examples or sources for the ID.
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?
Description clearly states the tool deletes fanfou statuses, and specifies the restriction to own content. It distinguishes from sibling tools like publish_status or manage_favorite, but does not explicitly contrast with them.
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?
Description notes that only own content can be deleted, which is a usage constraint. However, it does not provide guidance on when to use this tool versus others, nor does it mention prerequisites or alternatives. The confirm parameter is explained as a safety measure, which provides limited context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_oauth_tokenA
生成 OAuth Token
使用用户名密码通过 x_auth 方式生成 OAuth Token,用于后续免密登录。 生成的 Token 会在控制台输出,用户需要手动保存到环境变量中。
环境变量要求:
FANFOU_API_KEY: 饭否应用的 API Key
FANFOU_API_SECRET: 饭否应用的 API Secret
FANFOU_USERNAME: 饭否用户名
FANFOU_PASSWORD: 饭否密码
Returns: 包含 OAuth Token 信息的字典,包括 oauth_token 和 oauth_token_secret
| 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?
No annotations are provided, so the description carries the full burden. It discloses that the token is output to the console, the user must manually save it to an environment variable, and lists required environment variables. This provides good transparency about the manual step and prerequisites, though it lacks details on error handling or token persistence.
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 well-structured with a clear title, explanation, prerequisite list, and return description. It is front-loaded with the purpose. The environment variable list is necessary but slightly verbose; overall concise.
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 zero parameters and no annotations, the description adequately covers the tool's purpose, method, prerequisites, and output. It does not mention error cases or token lifecycle, but for a simple authentication tool it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so schema coverage is 100%. The description clarifies that there are no input parameters but instead relies on environment variables (FANFOU_API_KEY, etc.), adding meaning beyond the empty schema. It also describes the return value structure.
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 generates an OAuth token using username/password for subsequent passwordless login. It specifies the verb 'generate', the resource 'OAuth Token', and the method 'x_auth'. This clearly distinguishes it from sibling tools which focus on statuses, users, favorites, etc.
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 explains the token is for subsequent passwordless login (when to use) and lists required environment variables (prerequisites). However, it does not explicitly state when not to use this tool (e.g., if a token already exists) or contrast with alternatives, though no alternatives exist among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_home_timelineA
获取当前用户首页关注用户及自己的饭否时间线
调用饭否 API 的 /statuses/home_timeline.json 接口获取当前用户的首页时间线, 包含用户关注的所有人的最新消息。
注:通常用户询问「我的饭否」时,指的是该时间线,除非用户明确指出「某个用户的饭否」。
Args: count: 获取数量,默认 5 条 max_id: 返回列表中内容最新 ID,用于分页获取更早的内容
Returns: 首页时间线列表,每个元素包含: - 饭否内容: 消息文本内容(HTML 格式) * 转发:以「转@」开头,后跟用户链接,如 转@kingcos,其中 href 中的是用户 ID,inner Text 是被转发用户的显示名称,一条饭否可能有多个转发 * 话题:以「#」包围,如 #正在播放#,其中 q/ 后面的是话题名,一条饭否可能有多个话题 * 审核状态:如果内容末尾显示「【审核中】」,表示该内容正在审核中 - 发布 ID: 消息的唯一标识符 - 发布时间: 消息发布时间,需转为北京时间 - 发布者: 发布者的用户名 - 发布者 ID: 发布者的用户 ID - 图片链接: 如果包含图片,则提供图片链接
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| max_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full burden. It describes the API call, the data retrieval nature, and provides detailed output structure including HTML formats, mentions of reposts, topics, and audit status. It implicitly indicates it's a read operation. However, it does not explicitly state authorization requirements or rate limits, which would further enhance 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 well-structured with a clear purpose statement, an API reference, a usage note, and a detailed returns section with bullet points. It is front-loaded with the core purpose. Could be slightly more concise, but no unnecessary sentences.
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 that the tool has a detailed output schema described in the returns section and the two parameters are fully explained, the description is complete for this simple read tool. It also addresses an edge case (user referring to 'my fanfou'). The lack of error handling or rate limit information is acceptable for a basic read 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?
Input schema has 0% description coverage, but the description compensates by explaining both parameters: 'count: 获取数量,默认 5 条' and 'max_id: 返回列表中内容最新 ID,用于分页获取更早的内容'. This adds meaning beyond the schema's title and default values.
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 retrieves the home timeline of the current user's followed users, and distinguishes it from a specific user's timeline. It references the API endpoint and provides context that normally when users say 'my fanfou', this tool applies, differentiating it from sibling tools like get_user_timeline and get_public_timeline.
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 includes explicit guidance on when to use this tool: '通常用户询问「我的饭否」时,指的是该时间线,除非用户明确指出「某个用户的饭否」'. This helps the agent decide between home timeline and specific user timelines. However, it does not explicitly list all alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_public_timelineA
获取公开时间线
调用饭否 API 的 /statuses/public_timeline.json 接口获取饭否全站最新的公开消息, 这些是所有用户可见的公开饭否内容。
当提供搜索关键词时,会调用 /search/public_timeline.json 接口进行搜索。
Args: count: 获取数量,默认 5 条 max_id: 返回列表中内容最新 ID,用于分页获取更早的内容 q: 搜索关键词,如果为空则获取普通公开时间线;如果不为空则搜索包含该关键词的公开消息
Returns: 公开时间线列表,每个元素包含: - 饭否内容: 消息文本内容(HTML 格式) * 转发:以「转@」开头,后跟用户链接,如 转@kingcos,其中 href 中的是用户 ID,inner Text 是被转发用户的显示名称,一条饭否可能有多个转发 * 话题:以「#」包围,如 #正在播放#,其中 q/ 后面的是话题名,一条饭否可能有多个话题 * 审核状态:如果内容末尾显示「【审核中】」,表示该内容正在审核中 - 发布 ID: 消息的唯一标识符 - 发布时间: 消息发布时间,需转为北京时间 - 发布者: 发布者的用户名 - 发布者 ID: 发布者的用户 ID - 图片链接: 如果包含图片,则提供图片链接
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| max_id | No | ||
| q | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It details the API endpoints, data source (public content), and return structure. It is clear it is a read operation. However, it does not discuss authentication or rate limits, but given the detail, it is above average.
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 lengthy (approx. 30 lines) but well-structured with sections. While informative, some details in the return format could be streamlined. It is not maximally concise, but structure earns a baseline score.
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 three simple parameters and a detailed return description (despite an output schema not being fully provided), the description covers behavior, input, and output comprehensively for an agent to use effectively.
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 0%, so the description must compensate. It thoroughly explains all three parameters: count (default 5), max_id (for pagination), and q (search keyword). This adds significant meaning beyond the schema's bare titles and types.
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 retrieves the public timeline from Fanfou API, specifying two modes: normal retrieval and search. It distinguishes between them but does not explicitly differentiate from sibling tools like get_home_timeline or get_user_timeline.
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 explains when to use each mode (when q is provided vs not), but lacks guidance on when to choose this tool over alternatives such as get_home_timeline or get_user_timeline. No when-not or exclusion conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_status_infoA
获取某条饭否内容的具体信息
调用饭否 API 的 /statuses/show/id.json 接口获取指定饭否内容的详细信息。
Args: status_id: 饭否内容的 ID
Returns: 饭否内容的详细信息字典,包含: - 饭否内容: 消息文本内容(HTML 格式) * 转发:以「转@」开头,后跟用户链接,如 转@kingcos,其中 href 中的是用户 ID,inner Text 是被转发用户的显示名称,一条饭否可能有多个转发 * 话题:以「#」包围,如 #正在播放#,其中 q/ 后面的是话题名,一条饭否可能有多个话题 * 审核状态:如果内容末尾显示「【审核中】」,表示该内容正在审核中 - 发布 ID: 消息的唯一标识符 - 发布时间: 消息发布时间,需转为北京时间 - 发布者: 发布者的显示名称 - 发布者 ID: 发布者的用户 ID - 是否收藏: 当前用户是否收藏了该消息 - 是否是自己: 是否是当前用户发布的消息 - 发布位置: 消息发布的地理位置 - 回复信息: 如果是回复消息,包含被回复的状态 ID、用户 ID 和用户名 - 图片base64: 如果包含图片,则提供图片的 base64 编码(data URL 格式) - 图片链接: 如果包含图片,则提供原始图片链接作为备用
| Name | Required | Description | Default |
|---|---|---|---|
| status_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It details return fields and formats, but lacks disclosure about authentication, rate limits, or side effects. Read-only nature implied but not stated.
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?
Description is detailed, especially the returns section, which is justified for complex data. However, it could be more structured (e.g., bullet points) and slightly shorter.
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 single parameter and presence of output schema, the description compensates by detailing the return dictionary. It covers expected fields and special cases (e.g., retweets, audits), making it complete for the tool's complexity.
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?
Parameter status_id is described as '饭否内容的 ID', which adds meaning beyond the schema (only title and type). With 0% schema coverage, this is valuable.
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 it retrieves detailed information about a specific Fanfou status, specifying the API endpoint and distinguishing it from sibling tools that deal with timelines or user info.
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?
Purpose is implied: use when you need details of a known status ID. No explicit when-not-to-use or comparison with alternatives like get_home_timeline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_infoA
获取用户信息
调用饭否 API 的 /users/show.json 接口获取指定用户的详细信息。 如果 user_id 为空,则获取当前登录用户的信息。
Args: user_id: 用户 ID,如果为空则获取当前用户信息
Returns: 用户信息字典,包含: - 用户 ID: 用户的唯一标识符 - 用户名: 用户名 - 位置: 用户所在位置 - 性别: 用户性别 - 生日: 用户生日 - 描述: 用户个人描述 - 头像: 用户头像链接 - 链接: 用户个人网站链接 - 是否加锁: 账号是否受保护 - 粉丝数: 被关注数量 - 朋友数: 互相关注数量 - 收藏数: 收藏的消息数量 - 发布数: 发布的消息数量 - 照片数: 发布的照片数量 - 是否关注: 当前用户是否关注该用户 - 注册时间: 账号注册时间 - 最新状态: 用户最新发布的消息信息
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No |
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 discloses the API endpoint, conditional behavior, and return fields, but does not mention authentication requirements or rate limits, which are important for a tool accessing user 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 clear and structured, but the extensive list of return fields makes it somewhat verbose; it could be more concise by summarizing the return type.
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, the description covers purpose, parameter semantics, and return values adequately, though it omits error handling or authentication notes.
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 significant value beyond the schema by explaining the default behavior when user_id is empty and detailing the return structure, compensating for the schema's lack of description.
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 it retrieves detailed user info via a specific API, and distinguishes itself from sibling tools (timelines, status, etc.) by focusing on user resources.
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 explains that it gets info for a specified user or the current user if user_id is empty, providing clear context for use, though it does not explicitly exclude alternative scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_timelineA
根据用户 ID 获取某个用户发表内容的时间线
调用饭否 API 的 /statuses/user_timeline.json 接口获取指定用户的时间线。 如果 user_id 为空,则获取当前登录用户的时间线。
当提供搜索关键词时,会调用 /search/user_timeline.json 接口进行搜索。
Args: user_id: 用户 ID,如果为空则获取当前用户时间线 max_id: 返回列表中内容最新 ID,用于分页获取更早的内容 count: 获取数量,默认 5 条 q: 搜索关键词,如果为空则获取普通用户时间线;如果不为空则搜索该用户包含该关键词的消息
Returns: 用户时间线列表,每个元素包含: - 饭否内容: 消息文本内容(HTML 格式) * 转发:以「转@」开头,后跟用户链接,如 转@kingcos,其中 href 中的是用户 ID,inner Text 是被转发用户的显示名称,一条饭否可能有多个转发 * 话题:以「#」包围,如 #正在播放#,其中 q/ 后面的是话题名,一条饭否可能有多个话题 * 审核状态:如果内容末尾显示「【审核中】」,表示该内容正在审核中 - 发布 ID: 消息的唯一标识符 - 发布时间: 消息发布时间,需转为北京时间 - 发布者: 发布者的用户名 - 发布者 ID: 发布者的用户 ID - 图片链接: 如果包含图片,则提供图片链接
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | ||
| max_id | No | ||
| count | No | ||
| q | No |
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 should disclose behavioral traits like authentication needs, rate limits, or side effects. It only mentions API endpoints and output format, lacking details on permissions, error conditions, or data mutability.
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 well-structured with sections for summary, usage, args, and returns. It is somewhat lengthy but front-loaded with key purpose. Could be slightly more concise, but overall effective.
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 presence of an output schema, the description covers return format in detail (HTML formatting, forwarding, topics, audit status). It explains two modes of operation. Missing error handling, but overall provides sufficient context for 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 0%, but the description explains each parameter's meaning and behavior (e.g., user_id empty gets current user, q enables search, max_id for pagination). This adds significant value beyond the bare schema.
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 it retrieves a user's timeline via specific API endpoints, distinguishes between current user and other users based on user_id, and handles search functionality. It differentiates from siblings like get_home_timeline and get_public_timeline.
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?
Provides conditions for when to use different parameter values (empty user_id, q provided). However, it does not explicitly state when to use this tool over sibling tools, though the name and context imply typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_favoriteA
管理饭否内容的收藏状态
调用饭否 API 的 /favorites/create/id.json 或 /favorites/destroy/id.json 接口 来收藏或取消收藏指定的饭否内容。
Args: status_id: 饭否内容的 ID action: 操作类型,"create" 表示收藏,"destroy" 表示取消收藏 confirm: 是否确认操作(二次确认参数)
Returns: 操作结果字典,包含: - 是否收藏: 操作后的收藏状态 - 操作结果: 操作是否成功的描述信息 - 操作类型: 执行的具体操作(收藏/取消收藏)
或者确认信息字典,包含:
- 需要确认: 是否需要用户确认
- 内容预览: 要操作的内容预览
- 确认提示: 如何进行确认的说明| Name | Required | Description | Default |
|---|---|---|---|
| status_id | Yes | ||
| action | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
详细说明了调用的API、操作影响、二次确认流程和返回结果,弥补了无注释的不足。
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?
描述较长但分段清晰,信息完整,略可精简。
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?
覆盖了输入、输出、行为,配合输出schema说明,对工具使用场景描述充分。
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?
所有3个参数均有详细说明,包括status_id含义、action的create/destroy取值、confirm的确认作用,补充了schema的缺失。
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?
明确指定了管理饭否内容的收藏状态,通过调用具体API接口,与其他发布、删除等工具区分。
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?
描述了收藏/取消收藏的操作,但未明确排除其他场景或提供替代方案。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_friendshipA
管理用户关注状态
调用饭否 API 的 /friendships/create.json 或 /friendships/destroy.json 接口 来关注或取消关注指定用户。
注意:在执行关注操作前,会先调用 get_user_info 查询目标用户信息, 如果目标用户账号受保护(protected),关注操作将变为申请关注, 需要对方确认后才能生效。
Args: user_id: 目标用户的 ID action: 操作类型,"create" 表示关注,"destroy" 表示取消关注 confirm: 是否确认操作(二次确认参数)
Returns: 操作结果字典,包含: - 是否关注: 操作后的关注状态 - 操作结果: 操作是否成功的描述信息 - 操作类型: 执行的具体操作(关注/取消关注) - 用户信息: 目标用户的基本信息 - 特殊情况: 如果是受保护账号的关注申请,会包含相关提示
或者确认信息字典,包含:
- 需要确认: 是否需要用户确认
- 用户预览: 要操作的用户预览
- 确认提示: 如何进行确认的说明| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | ||
| action | Yes | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses important behavior: it calls get_user_info first, and for protected accounts it becomes a follow request. It does not cover rate limits or auth needs, but the key side effects are explained.
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 well-structured with paragraphs and an Args/Returns section. It is slightly lengthy but each part earns its place. Minor redundancy, but generally efficient.
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 and the presence of an output schema, the description covers the main use case, the special protected account scenario, and the confirm parameter. Return values are detailed, making it 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?
Schema description coverage is 0%, but the description fully explains each parameter: user_id, action ('create'/'destroy'), and confirm (secondary confirmation). This adds significant meaning beyond the schema.
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 managing user follow status (关注/取消关注), using specific API endpoints. It distinguishes from sibling tools like manage_favorite and publish_status.
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 explains when to use the tool (to follow/unfollow) and provides context about protected accounts. However, it does not explicitly mention when not to use or suggest alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_photoA
发布饭否内容(文字+图片)
调用饭否 API 的 /photos/upload.json 接口发布带图片的内容。
Args: status: 要发布的文字内容(最多140字) photo_url: 图片的网络 URL 地址 confirm: 是否确认发布(二次确认参数)
Returns: 发布结果字典,包含: - 发布 ID: 新发布消息的唯一标识符 - 发布时间: 消息发布时间 - 发布结果: 发布是否成功的描述信息 - 重要提示: 关于审核的提醒信息
或者确认信息字典,包含:
- 需要确认: 是否需要用户确认
- 内容预览: 要发布的内容预览
- 确认提示: 如何进行确认的说明| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| photo_url | Yes | ||
| confirm | No |
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 full burden. It discloses the API call and confirmation flow but omits authentication needs, rate limits, and mutability. It adds some value but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with clear section headers for Args and Returns. No unnecessary words; structured meaningfully.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers input parameters and return values well. However, it omits error handling, authentication requirements, and potential side effects. For a posting tool, this is a minor 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 coverage is 0%, so the description fully compensates by explaining each parameter: status with max length, photo_url as URL, confirm as confirmation flag. It also details return fields.
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: posting content with images to Fanfou via the /photos/upload.json API. It distinguishes from the sibling publish_status by specifying image inclusion.
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 for image posts but does not explicitly guide when to use this vs. publish_status or when to set the confirm parameter. It lacks explicit when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_statusA
发布饭否内容(仅文字)
调用饭否 API 的 /statuses/update.json 接口发布纯文字内容。
Args: status: 要发布的文字内容(最多140字) confirm: 是否确认发布(二次确认参数)
Returns: 发布结果字典,包含: - 发布 ID: 新发布消息的唯一标识符 - 发布时间: 消息发布时间,需转为北京时间 - 发布结果: 发布是否成功的描述信息 - 重要提示: 关于审核的提醒信息
或者确认信息字典,包含:
- 需要确认: 是否需要用户确认
- 内容预览: 要发布的内容预览
- 确认提示: 如何进行确认的说明| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | ||
| confirm | No |
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 must carry the full burden. It discloses that the tool calls an API to post text, requires a confirm parameter for a two-step process, and returns a dictionary with status info and review reminders. However, it does not mention potential irreversible effects, authentication needs, or rate limits.
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 structured with Args and Returns sections, but it includes some redundancy (e.g., restating '发布饭否内容' in the first line and again in the API reference). It could be more concise by combining these, but it is not overly long.
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 an output schema and only two parameters, the description provides enough detail: what it does, parameters with constraints, and return value structure. It lacks sibling differentiation but covers the essentials for a simple text-posting tool.
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 0%, so description must compensate. It explains 'status' has a 140-character limit and 'confirm' is a secondary confirmation parameter. The return structure is detailed with keys like publish ID, timestamp, result, and tips. This adds meaningful context beyond the raw schema.
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 publishes text-only content on Fanfou via a specific API endpoint. It explicitly says '(仅文字)' distinguishing it from sibling tools like publish_photo. The verb '发布' (publish) and resource '饭否内容' (Fanfou content) are specific.
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 does not provide any guidance on when to use this tool versus alternatives like publish_photo or get_home_timeline. There is no mention of prerequisites, context, or scenarios where this tool is appropriate or not.
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.
11 tool updates
v0.1.1- First observed
delete_status - First observed
generate_oauth_token - First observed
get_home_timeline - First observed
get_public_timeline - First observed
get_status_info - First observed
get_user_info - First observed
get_user_timeline - First observed
manage_favorite - First observed
manage_friendship - First observed
publish_photo - First observed
publish_status
TDQS
Scored across 11 tools
Each tool targets a distinct action or resource: deletion, timeline retrieval, status info, user info, publishing, favoriting, friendship management, and OAuth generation. No two tools have overlapping purposes; agents can easily differentiate them.
All tool names follow a consistent verb_noun pattern (e.g., delete_status, get_home_timeline, manage_favorite). The verbs (delete, generate, get, manage, publish) clearly indicate the action, and nouns specify the resource, forming a predictable and readable set.
With 11 tools covering authentication, multiple timeline retrievals, user info, status CRUD, favoriting, and friendships, the count is well-scoped for a microblogging service. Each tool serves a necessary function without redundancy.
The tool set covers core operations: publishing text and photos, deleting, favoriting, managing follows, and viewing timelines. However, notable gaps include missing tools to list followers/friends or view a user's favorites list, which an agent might need for full user interaction.
Maintenance
Related MCP Connectors
FastMCP server for posting formatted content to X (Twitter) — Tollbooth-monetized, DPYC-native
A simple MCP server built with FastMCP and python
The official Planning Center MCP server for interacting with your ministry's data.
MCP server for the FFmpeg Micro video transcoding API — create, monitor, download transcodes.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceA basic MCP server built with FastMCP framework that provides example tools including message echoing and server information retrieval. Supports both stdio and HTTP transports with Docker deployment capabilities.-
- -licenseNot gradedqualityNot gradedmaintenanceA basic MCP server built with FastMCP framework that provides example tools including message echoing and server information retrieval. Supports both stdio and HTTP transports with Docker deployment capabilities.-
- -licenseNot gradedqualityNot gradedmaintenanceA basic MCP server built with FastMCP framework that provides simple utility tools including message echoing and server information retrieval. Supports both stdio and HTTP transports with Docker deployment capabilities.-
- -licenseNot gradedqualityNot gradedmaintenanceA basic MCP server built with FastMCP framework that provides example tools including message echoing and server information retrieval. Supports both stdio and HTTP transports for integration with various MCP clients.-