博客管理服务器

一个用于Hatena博客的MCP服务器,支持通过AI助手进行文章的发布、更新和管理。

  • by YusukeHayashiii
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 YusukeHayashiii/hatena-mcp-server

使用说明

Hatena博客MCP服务器

这是一台用于在博客上投稿、更新文章的MCP(Model Context Protocol)服务器。Claude Code等AI助手可以与博客合作进行报道管理。 因为是个人出于兴趣而开发的,所以请自己负责使用。

🚀 主要功能

  • 记事投稿:发布新博客文章
  • 记事更新:编辑和更新现有文章
  • 记事取得:获取指定文章的详细信息
  • 记事一覧:浏览博客文章
  • Markdown対応:直接从Markdown文件发布文章
  • Front Matter対応:通过YAML Front Matter进行元数据管理

📋 必要的准备

1.获取博客API密钥

  1. 网易博客登录
  2. 从帐户设置获取API密钥
  3. 查看博客用户名和博客域(例如,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包管理器)

安装说明

  1. 克隆存储库

    git clone https://github.com/YusukeHayashiii/hatena-mcp-server.git
    cd hatena-mcp-server
    
  2. 安装相关性

    uv sync --extra dev
    
  3. 环境设定

    cp .env.example .env
    # .env ファイルを編集して認証情報を設定
    
  4. 测试运行

    uv run pytest -q
    

🏃 使用方法

启动MCP服务器

uv run src/hatena_blog_mcp/server.py

在Claude Code中使用

  1. 通过Claude Code连接到MCP服务器
  2. 查看可用工具
  3. 使用工具执行博客操作

Claude Code(VS Code/Claude Desktop)的使用设置

  1. 创建配置文件(或添加到现有文件中)
  • ~/.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)
  1. 重新启动Claude Code
  • 重新启动后连接成功后 hatena-mcp 的工具群可用
  1. 动作确认
  • 在工具列表中 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) を実行してください
  1. 常见错误
  • 未显示工具: .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

🐛 故障排除

发生认证错误时

  1. .env 确认文件的设定值
  2. 确认API密钥在博客的设定画面中是否有效
  3. 验证用户名和博客域是否正确

发生网络错误时

  1. 检查互联网连接
  2. 检查防火墙设置
  3. 如果需要代理设置,则设置环境变量

如果测试失败

# テスト用環境変数を設定
export HATENA_USERNAME=test_user
export HATENA_BLOG_DOMAIN=test_user.hatenablog.com
export HATENA_API_KEY=test_key

# テスト実行
uv run pytest -v

📚 参考资料

📝 许可证

MIT许可证

📧 联系我们

如果有问题或建议问题 请通知我。