MCP server for AI-powered blog management, providing tools for article management, markdown conversion, and blog statistics through Model Context Protocol
This MCP server implements 10 blog management tools with generally strong naming conventions and comprehensive descriptions. All tools use action verbs (get_, query_, save_, convert_) and are purpose-specific. However, there are critical gaps in input schema documentation, while parameter descriptions exist in C# attributes, the actual JSON Schema definitions for parameters are not explicitly shown in the source code provided. Output schemas are partially documented in descriptions but not formally specified. Error handling is mentioned in descriptions but implementation details are not visible. The server demonstrates good understanding of tool composition and clear dependencies between tools (e.g., query_articles returns IDs needed by get_article_markdown). Chinese descriptions are detailed but not ideal for LLM consumption, descriptions should be concise and in the client's language. Tool parameters show good constraint documentation (e.g., pageSize range 1-100), but enum values are not formally declared in schemas. The save_article tool is well-designed for both create and update patterns with smart defaults and AI-assisted metadata generation.
将 Markdown 文本转换为格式化的 HTML。独立工具,不涉及文章保存。适用于预览 Markdown 渲染效果或测试转换结果。如果客户端提供了 progressToken,将通过 MCP 进度通知发送生成进度。参数:markdown(必填,要转换的 Markdown 文本)、customPrompt(可选,自定义 AI 提示词)。返回 HtmlConversionResult 对象,包含:Status(状态)、Html(完整 HTML)、Error(错误信息)。
根据文章 ID 和版本名称获取该版本的 HTML 内容。用于预览或查看历史版本的渲染结果。参数:id(文章ID,必填)、versionName(版本名称,必填)。成功返回 HTML 字符串,失败返回错误信息字符串(以'错误:'开头)。
获取文章的 Markdown 原文。支持三种查询方式(至少提供一个):1. 通过 slug(推荐,最准确);2. 通过 id(次选);3. 通过 title(模糊匹配,可能不精确)。优先级:id > slug > title。成功返回 Markdown 文本,失败返回错误信息字符串(以'错误:'开头)。
根据 slug 获取文章的完整元数据,包括标题、分类、标签、摘要、发布状态、版本列表等。不包含 Markdown 原文和 HTML 内容。参数:slug(文章的 URL 标识,必填,如 'hello-world')、versionName(可选,用于验证指定版本是否存在,不存在则返回 null)。MCP 调用具有管理员权限,可查看未发布的文章。
根据 slug 获取文章的所有历史版本列表,每个版本包含版本名称、创建时间、验证状态等信息。参数:slug(文章的 URL 标识,必填)。返回版本列表,文章不存在时返回空列表。
Input schemas are inferred from C# parameter attributes but not shown as explicit JSON Schema definitions in source code. Cannot verify that JSON Schema includes proper type constraints, enums, required fields, or minimum/maximum bounds.
Output schemas are not formally documented. Tool descriptions mention return types (e.g., 'PagedResult<ArticleListItemDto>', 'HtmlConversionResult'), but the actual field definitions and structure are not visible in source. LLMs cannot reliably extract or chain results without documented schemas.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 76 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 43 | - | v1 |
获取博客基础信息和博主资料,包括博客名称、博主昵称、联系邮箱、头像URL、个人签名、域名、网站图标及外链列表。返回完整的博客配置信息。
获取所有分类及其文章数量的统计信息,按文章数量降序排列。可选参数:tags(标签列表,英文逗号分隔,用于过滤包含指定标签的分类统计)。MCP 调用具有管理员权限,统计包含未发布文章的分类。返回分类列表,每个分类包含名称和文章数量。
获取所有标签及其使用次数的统计信息,按使用次数降序排列。可选参数:category(分类名称,用于过滤指定分类下的标签统计)。MCP 调用具有管理员权限,统计包含未发布文章的标签。返回标签列表,每个标签包含名称和使用次数。
查询文章列表,支持多维度筛选和分页。返回文章摘要信息(不含 Markdown/HTML 内容)。筛选条件:分类(精确匹配)、标签(包含任意标签,用英文逗号分隔如'C#,Vue')、发布状态、精选标记。分页参数:page(页码,从1开始,默认1)、pageSize(每页数量,范围1-100,默认10)。所有筛选条件采用 AND 组合,标签匹配采用 OR 逻辑。
保存文章(快速保存,不生成 HTML)。适用于草稿快速保存。使用场景:1. 创建文章(不传id):AI 自动生成未提供的元数据(title/slug/category/tags/excerpt),返回丰富的文章数据供查验;2. 更新文章(传id):更新元数据和 Markdown,不创建新版本。参数:markdown(必填)、id(可选,创建/更新标识)、title/slug/category/tags/excerpt(可选,AI自动生成)、isPublished/isFeatured(可选)。返回保存后的完整元数据,失败返回错误信息字符串(以'错误:'开头)。
Parameter enums are documented in text descriptions but not formally declared in schema (e.g., 'isPublished can be null/true/false', 'pageSize range 1-100'). LLMs cannot machine-parse these constraints and may generate invalid values.
Error handling strategy is mentioned in descriptions (e.g., 'returns error info string starting with 错误:') but the implementation logic is not visible. Cannot verify that errors are categorized, actionable, or guide recovery. Example: get_article_html/get_article_markdown return error strings, but LLMs cannot parse or classify these for retry vs user-fixable decisions.
Descriptions are in Chinese, which may not match the client's or LLM's language context. For optimal LLM understanding, descriptions should be in English or the primary language of the deployment environment. Chinese descriptions introduce translation overhead for non-Chinese speaking LLMs.