hatena-blog-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HATENA_ID | Yes | はてなID(認証に使うアカウント、API キーの持ち主)。WSSE 認証に使用する。 | |
| HATENA_API_KEY | Yes | はてなブログの [設定] > [詳細設定] > [AtomPub] に表示される API キー。WSSE 認証に使用する。 | |
| HATENA_BLOG_ID | Yes | ルートエンドポイントの {ブログID} の部分(例: tech.example.hatenablog.com)。 | |
| HATENA_BLOG_OWNER_ID | No | ルートエンドポイントの {ブログ所有者のはてなID} の部分。省略時は HATENA_ID が使われる。共有ブログで所有者と操作者が異なる場合に指定する。 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_blog_infoA | 接続先ブログのタイトルと、利用できるコレクション(記事・固定ページ)を取得する。設定と認証が正しいかの疎通確認にも使える。固定ページのコレクションは有料プランでのみ返る。 |
| list_categoriesA | ブログで使われているカテゴリの一覧を取得する。記事を作成・更新する前に、既存のカテゴリ名と表記を揃えるために確認する。 |
| list_entriesA | ブログ記事を新しい順に一覧する。下書きも含まれる。1 ページあたりの件数は API 側で決まっており、続きを読むには戻り値の next_page を page に渡す。本文まで読みたい場合は get_entry を使う。 |
| search_entriesA | ブログ記事をページを辿りながら検索する。タイトル・本文・カテゴリを対象に部分一致(大文字小文字は無視)。はてなブログの API は一覧の 1 ページあたり件数が少ないため、まとめて探すときはこのツールを使う。古いブログ記事まで届かない場合は max_pages を増やす。 |
| get_entryA | ブログ記事を 1 件取得する。本文(登録記法のまま)・カテゴリ・公開状態を含む。編集前に必ずこれで現状を確認する。 |
| create_entryA | ブログ記事を新規作成する。既定では下書きとして作成されるので、公開する場合は draft を false にする。予約投稿する場合は draft=true・scheduled=true と、未来日時の updated を指定する。 |
| update_entryA | ブログ記事を更新する。指定した項目だけを差し替える差分更新で、省略した項目は現在の値がそのまま残る。下書きを公開するには draft=false を指定する。categories を渡すと現在のカテゴリは完全に置き換わる。 |
| list_pagesA | 固定ページを新しい順に一覧する。下書きも含まれる。1 ページあたりの件数は API 側で決まっており、続きを読むには戻り値の next_page を page に渡す。本文まで読みたい場合は get_page を使う。 固定ページははてなブログの有料プランでのみ利用できる。無料プランでは 404 が返る。 |
| search_pagesA | 固定ページをページを辿りながら検索する。タイトル・本文・カテゴリを対象に部分一致(大文字小文字は無視)。はてなブログの API は一覧の 1 ページあたり件数が少ないため、まとめて探すときはこのツールを使う。古い固定ページまで届かない場合は max_pages を増やす。 固定ページははてなブログの有料プランでのみ利用できる。無料プランでは 404 が返る。 |
| get_pageA | 固定ページを 1 件取得する。本文(登録記法のまま)・カテゴリ・公開状態を含む。編集前に必ずこれで現状を確認する。 固定ページははてなブログの有料プランでのみ利用できる。無料プランでは 404 が返る。 |
| create_pageA | 固定ページを新規作成する。既定では下書きとして作成されるので、公開する場合は draft を false にする。予約投稿する場合は draft=true・scheduled=true と、未来日時の updated を指定する。 固定ページははてなブログの有料プランでのみ利用できる。無料プランでは 404 が返る。 |
| update_pageA | 固定ページを更新する。指定した項目だけを差し替える差分更新で、省略した項目は現在の値がそのまま残る。下書きを公開するには draft=false を指定する。categories を渡すと現在のカテゴリは完全に置き換わる。 固定ページははてなブログの有料プランでのみ利用できる。無料プランでは 404 が返る。 |
| upload_imageA | ローカルの画像をはてなフォトライフにアップロードし、記事本文に貼れる記法(embed)を返す。embed は Markdown・はてな記法の編集モード向け。見たままモードのブログでは imageUrl を使う。画像は認証アカウント(HATENA_ID)のフォトライフに保存され、URL を知っていれば誰でも見られる。社外に出してよい画像だけを渡すこと。アップロードした画像の削除はブラウザから行う。 |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
Each tool maps to a distinct resource and action: entries, pages, categories, blog info, and image upload are cleanly separated. The list/search/get/create/update split is explicit, and descriptions clarify when to use list versus search.
All tool names use consistent snake_case verb_noun patterns such as list_entries, get_entry, create_page, and update_page. Even the auxiliary tools get_blog_info, list_categories, and upload_image fit the same readable convention.
With 13 tools, the set is well-scoped: entry CRUD/list/search, page CRUD/list/search, plus blog info, categories, and image upload. Each tool has a clear place, and the symmetric entries/pages coverage is reasonable rather than redundant.
The surface covers create, read, update, list, and search for both entries and pages, but deletion operations for entries and pages are missing. Image upload exists without an accompanying delete tool, with deletion explicitly delegated to the browser, leaving lifecycle gaps.