使用说明
Hatena博客MCP服务器
这是一台用于在博客上投稿、更新文章的MCP(Model Context Protocol)服务器。Claude Code等AI助手可以与博客合作进行报道管理。 因为是个人出于兴趣而开发的,所以请自己负责使用。
🚀 主要功能
- 记事投稿:发布新博客文章
- 记事更新:编辑和更新现有文章
- 记事取得:获取指定文章的详细信息
- 记事一覧:浏览博客文章
- Markdown対応:直接从Markdown文件发布文章
- Front Matter対応:通过YAML Front Matter进行元数据管理
📋 必要的准备
1.获取博客API密钥
- 网易博客登录
- 从帐户设置获取API密钥
- 查看博客用户名和博客域(例如,username.hatenablog.com)
2.环境设定
项目根目录 .env 创建文件并设置以下信息:
HATENA_USERNAME=your_username
HATENA_BLOG_DOMAIN=your_username.hatenablog.com
HATENA_API_KEY=your_api_key_here
🛠️ 安装,安装
前提条件
- Python 3.12以上
- uv(Python包管理器)
安装说明
-
克隆存储库
git clone https://github.com/YusukeHayashiii/hatena-mcp-server.git cd hatena-mcp-server -
安装相关性
uv sync --extra dev -
环境设定
cp .env.example .env # .env ファイルを編集して認証情報を設定 -
测试运行
uv run pytest -q
🏃 使用方法
启动MCP服务器
uv run src/hatena_blog_mcp/server.py
在Claude Code中使用
- 通过Claude Code连接到MCP服务器
- 查看可用工具
- 使用工具执行博客操作
Claude Code(VS Code/Claude Desktop)的使用设置
- 创建配置文件(或添加到现有文件中)
~/.claude.json在中添加以下内容(在用户范围中添加)
※正式文档 那么claude add <name> <command> [args...] 虽然写着,但是因为没能设定好所以直接设定了……
{
"mcpServers": {
"hatena-mcp": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/hatena-mcp-server",
"run",
"src/hatena_blog_mcp/server.py"
]
}
}
}
- 注意:
/absolute/path/to/hatena-mcp-server替换为实际项目路径.env位于项目正下方(.env自动加载假定存储库正下方)- 依赖关系需要提前
uv sync(也进行开发时uv sync --extra dev)
- 重新启动Claude Code
- 重新启动后连接成功后
hatena-mcp的工具群可用
- 动作确认
- 在工具列表中
create_blog_post,update_blog_post,get_blog_post,list_blog_posts,create_blog_post_from_markdown,delete_blog_post显示 - 示例(请求获取列表):
list_blog_posts(limit=5) を実行してください
- 常见错误
-
未显示工具:
.mcp.json路径/拼写错误--directory确认路径错误 -
验证错误:
.env的,之HATENA_USERNAME,HATENA_BLOG_DOMAIN,HATENA_API_KEY重新确认 -
参考:设置文件的放置位置为官方文档(Claude Code设置指南),模板名称将采用不同的格式
🔧 可用的MCP工具
create_blog_post
发布新的博客文章。
参数:
title(必需):文章标题content(必须):记事の本文(HTML形式)categories(可选):类别列表
使用例:
create_blog_post(
title="新しい記事",
content="<p>記事の本文です。</p>",
categories=["技術", "Python"]
)
update_blog_post
更新现有文章。
参数:
post_id(必需):要更新的文章的标识title(可选):新标题content(可选):新正文categories(可选):新类别
get_blog_post
获取指定文章的详细信息。
参数:
post_id(必需):要检索的文章的ID
list_blog_posts
获取博客文章列表。
参数:
limit(可选):获取的文章数量上限(默认值:10,最大值:100)
create_blog_post_from_markdown
从Markdown文件投稿文章。从矩阵 draft: true 中描述的相应参数的值。
参数:
path(必需):标记文件路径
Front Matter例:
---
title: 記事のタイトル
categories: [技術, Python]
draft: true
---
# 記事本文
Markdownで記述された本文がHTMLに変換されます。
关于草稿标志:草稿指定为AtomPub标准的
<app:control><app:draft>yes</app:draft></app:control>中所述修改相应参数的值<hatena:draft>是错误的,草稿无效,立即公开,因此修正完毕)。获取文章时app:draft优先,旧hatena:draft中所述修改相应参数的值。
delete_blog_post
删除指定ID的博客文章。
参数:
post_id(必需):要删除的文章的ID(简单ID、完全ID都可以指定)
🧪 测试
运行所有测试
uv run pytest -v
仅运行单元测试
uv run pytest tests/unit/ -v
仅运行集成测试
uv run pytest tests/integration/ -v
覆盖测试
uv run pytest --cov=src --cov-report=html
📁 项目结构
hatena-mcp-server/
├── src/
│ └── hatena_blog_mcp/
│ ├── server.py # MCP サーバーのメイン実装
│ ├── auth.py # WSSE 認証管理
│ ├── blog_service.py # ブログ操作サービス
│ ├── config.py # 設定管理
│ ├── error_handler.py # エラーハンドリング
│ ├── http_client.py # HTTP クライアント
│ ├── markdown_importer.py # Markdown インポーター
│ ├── models.py # データモデル
│ ├── rate_limiter.py # レート制限
│ ├── service_factory.py # サービスファクトリ
│ └── xml_processor.py # AtomPub XML 処理
├── tests/
│ ├── unit/ # ユニットテスト
│ └── integration/ # 統合テスト
├── .env.example # 環境変数テンプレート
├── pyproject.toml # プロジェクト設定
└── README.md # このファイル
🛠️ 开発
开发环境设置
# 開発用依存関係込みでインストール
uv sync --extra dev
# プリコミットフックの設定
uv run pre-commit install
代码质量检查
# リンティング
uv run ruff check src tests
# 型チェック
uv run mypy src
# フォーマット
uv run ruff format src tests
🐛 故障排除
发生认证错误时
.env确认文件的设定值- 确认API密钥在博客的设定画面中是否有效
- 验证用户名和博客域是否正确
发生网络错误时
- 检查互联网连接
- 检查防火墙设置
- 如果需要代理设置,则设置环境变量
如果测试失败
# テスト用環境変数を設定
export HATENA_USERNAME=test_user
export HATENA_BLOG_DOMAIN=test_user.hatenablog.com
export HATENA_API_KEY=test_key
# テスト実行
uv run pytest -v
📚 参考资料
📝 许可证
MIT许可证
📧 联系我们
如果有问题或建议问题 请通知我。
