今天用 Claude Code 的 MCP(Model Context Protocol)功能为 emlog 博客制作了一个工具,可以直接通过 AI 对话发布文章和微语。整个过程不到一天就完成了,这里记录一下流程。
一、MCP 简介
MCP 是一种让 AI 助手调用外部工具的标准协议。通过 MCP,AI 可以使用你开发的工具来完成任务,比如操作博客、查询数据库、调用 API 等。
二、技术选型
- Python:作为主力语言,生态丰富
- FastMCP:一款轻量级的 MCP 框架,简化了服务开发
- httpx:异步 HTTP 客户端,用来请求 emlog 的 REST API
- pydantic:数据验证和模型定义
三、项目结构
emlog_mcp.py # 主程序,定义所有工具
.mcp.json # MCP 配置文件
四、核心实现
1. 安装依赖
pip install mcp httpx pydantic
2. 定义数据模型
使用 pydantic 定义工具输入参数:
class CreateArticleInput(BaseModel):
title: str = Field(..., description="文章标题")
content: str = Field(..., description="文章内容")
sort_id: Optional[int] = Field(default=None, description="分类ID")
tags: Optional[str] = Field(default="", description="标签")
draft: Optional[str] = Field(default="n", description="草稿: y/n")
3. API 请求封装
async def _make_request(endpoint, method="GET", data=None):
url_params = {"rest-api": endpoint, "api_key": API_KEY}
# POST 请求时 api_key 放在 body 中
response = await client.post(BASE_URL, params=url_params, data=data)
return response.json()
4. 工具定义
使用装饰器声明工具:
@mcp.tool(name="emlog_create_article")
async def emlog_create_article(params: CreateArticleInput) -> str:
# 业务逻辑
result = await _make_request("article_post", method="POST", data=post_data)
return json.dumps(result)
5. 启动服务
if __name__ == "__main__":
mcp.run()
五、MCP 配置
在 .mcp.json 中配置服务:
{
"mcpServers": {
"emlog": {
"command": "python",
"args": ["C:/md_all/md_write/emlog_mcp.py"],
"env": {
"EMLOG_API_KEY": "your-api-key",
"EMLOG_BASE_URL": "https://your-blog.com/emlog/"
}
}
}
}
六、功能列表
目前实现了以下工具:
| 工具名 | 功能 |
|---|---|
| emlog_fetch_articles | 获取文章列表 |
| emlog_get_article | 获取文章详情 |
| emlog_create_article | 创建并发布文章 |
| emlog_update_article | 更新已有文章 |
| emlog_create_note | 发布微语 |
| emlog_upload_file | 上传文件/图片 |
| emlog_get_sorts | 获取分类列表 |
| emlog_fetch_and_publish | 抓取网页并发布 |
七、使用示例
现在可以直接用自然语言操作博客了:
用户:把今天的天气发布到博客
助手:调用 emlog_create_article 工具
结果:文章发布成功!
八、踩坑记录
- 变量未定义:调试时发现
_make_request中使用了未定义的url变量,应改为EMLOG_BASE_URL - 中文标签 Bug:emlog API 对中文标签有字符集问题,暂时绕过了这个功能
- api_key 传递方式:emlog 的 REST API 要求 api_key 作为 URL 参数传递,而不是放在 header 中
九、总结
用 MCP 开发工具非常高效,一次开发就能让 AI 助手具备操作博客的能力。后续可以继续扩展更多工具,比如评论管理、主题切换、数据统计等。
如果你也有博客或其他支持 API 的服务,不妨试试 MCP,工作效率会提升不少!


失落的羊2 天前
祝贺 MCP 服务成功运行!期待它为我的工作带来更多便利,效率提升!
失落的羊10 个月前
研究计划导入公众号文章。
失落的羊1 年前
研究插件:挂载点研究、文件读写研究、API读取数据、设置、前台显示
失落的羊1 年前
今日申请十年之约博客成员!
失落的羊1 年前
启用新的访问统计.