hatena-blog-mcp
hatena-blog-mcp
Servidor MCP para crear y actualizar artículos de Hatena Blog. Envuelve de forma ligera la API AtomPub de Hatena Blog y permite que los agentes de IA gestionen el borrador, la revisión y la publicación de artículos.
Configuración
El gestor de paquetes es pnpm (fijado en el campo packageManager).
pnpm install # 依存のインストールと同時に prepare で dist がビルドされるObtención de los valores de configuración
En [Configuración] > [Configuración avanzada] > [AtomPub] de Hatena Blog se muestran el «punto final raíz» y la «clave de API». El punto final raíz tiene el siguiente formato.
https://blog.hatena.ne.jp/{ブログ所有者のはてなID}/{ブログID}/atomVariable de entorno | Obligatoria | Valor |
| ○ | ID de Hatena de la cuenta utilizada para la autenticación (titular de la clave de API) |
| ○ | Parte |
| ○ | Clave de API |
| Parte |
Si el blog es propio, el propietario y el operador son la misma persona, por lo que
HATENA_BLOG_OWNER_IDno es necesario.En blogs compartidos (como el blog técnico de una empresa), el propietario y el operador son distintos. En ese caso, especifica el ID del propietario del blog en
HATENA_BLOG_OWNER_IDy tu propia cuenta enHATENA_ID.Si se usa un dominio propio con un plan de pago, en
HATENA_BLOG_IDse debe especificar el dominio anterior a la configuración del dominio propio.
Consulta .env.example.
Registro en el cliente MCP
En el caso de Claude Code:
# 自分が所有するブログ
claude mcp add hatena-blog -s user \
-e HATENA_ID=your-hatena-id \
-e HATENA_BLOG_ID=your-blog.hatenablog.com \
-e HATENA_API_KEY=your-api-key \
-- node /absolute/path/to/hatena-blog-mcp/dist/index.js
# 共有ブログ(所有者と操作者が異なる場合は HATENA_BLOG_OWNER_ID を足す)
claude mcp add hatena-blog -s user \
-e HATENA_ID=your-hatena-id \
-e HATENA_BLOG_OWNER_ID=blog-owner-id \
-e HATENA_BLOG_ID=blog-owner-id.hatenablog.com \
-e HATENA_API_KEY=your-api-key \
-- node /absolute/path/to/hatena-blog-mcp/dist/index.jsCon -s user estará disponible en todos los proyectos. No uses -s project (la clave de API se escribirá en .mcp.json).
Si se escribe directamente en el archivo de configuración:
{
"mcpServers": {
"hatena-blog": {
"command": "node",
"args": ["/absolute/path/to/tech-blog/dist/index.js"],
"env": {
"HATENA_ID": "your-hatena-id",
"HATENA_BLOG_OWNER_ID": "blog-owner-id",
"HATENA_BLOG_ID": "blog-owner-id.hatenablog.com",
"HATENA_API_KEY": "your-api-key"
}
}
}
}Una vez registrado, llamar a get_blog_info sirve para comprobar la conexión.
Related MCP server: Blogger MCP Server
Herramientas
Blog completo
Herramienta | Descripción |
| Obtiene el título del blog y las colecciones disponibles (también sirve para comprobar la conexión) |
| Lista de categorías utilizadas en el blog |
Artículos
Herramienta | Descripción |
| Lista los artículos del más reciente al más antiguo (incluye borradores). Con |
| Recorre las páginas y busca coincidencias parciales en título, cuerpo y categorías |
| Obtiene un artículo (el cuerpo se devuelve en la notación registrada) |
| Crea un artículo nuevo (por defecto, como borrador) |
| Actualiza un artículo de forma diferencial |
Páginas fijas
list_pages / search_pages / get_page / create_page / update_page están disponibles con la misma forma que los artículos.
Las páginas fijas solo están disponibles en los planes de pago de Hatena Blog (en el plan gratuito se devuelve 404).
Las páginas fijas no tienen categorías, por lo que no existe el parámetro categories.
Decisiones de diseño
No se implementa la eliminación
La eliminación (DELETE) de artículos y páginas fijas existe en la API, pero deliberadamente no se expone como herramienta.
El impacto de un error de operación es grande y no se puede deshacer. La eliminación se realiza desde el navegador.
update_entry es una actualización diferencial
Como el PUT de AtomPub «reemplaza todo con el contenido enviado», incluso si solo se quiere corregir el título,
es necesario volver a enviar el cuerpo, las categorías y la fecha de publicación.
Este servidor, dentro de update_entry, hace GET y luego reemplaza solo los elementos especificados antes de hacer PUT.
Los elementos omitidos conservan su valor actual.
Si se omite
updated, la fecha de publicación del artículo (la fecha mostrada) no cambia.Si se pasan
categories, se produce un reemplazo (no una adición). Si se quieren conservar las categorías existentes, hay que incluirlas también.
La creación nueva es un borrador por defecto
El draft de create_entry es true por defecto. Para evitar que un artículo se publique de repente por una operación del agente,
la publicación solo se realiza cuando se especifica explícitamente draft: false.
Notación del cuerpo
En content_type se puede especificar text/x-markdown / text/x-hatena-syntax / text/html / text/plain (por defecto, text/x-markdown).
Sin embargo, cómo se interpreta realmente depende del ajuste de «modo de edición» del blog, por lo que hay que escribir de acuerdo con la configuración del blog.
Al actualizar un artículo existente, se conserva la notación anterior a la edición.
Publicación programada
En create_entry, especifica draft: true + scheduled: true + un updated con fecha y hora futuras.
Paginación de las listas
La API de Hatena Blog devuelve pocos elementos por página, y el número lo decide la API
(la documentación oficial indica 7 artículos, pero se ha confirmado que en realidad devuelve 10).
list_entries devuelve una página y, pasando next_page al parámetro page de la siguiente llamada, se obtiene la continuación.
Para buscar en conjunto, usa search_entries, que recorre las páginas internamente. max_pages controla la cantidad de recorrido.
Autenticación e ID de Hatena en la URL
Se usa autenticación WSSE (cabecera X-WSSE). En cada petición se generan Nonce y Created, y se envía
Base64(SHA1(Nonce + Created + Clave de API)) como PasswordDigest.
Ten en cuenta que el ID de Hatena de la URL del punto final (propietario del blog) y la cuenta que se autentica son cosas distintas. Como la clave de API se emite por cuenta y no por blog, en un blog compartido la combinación es:
URL:
https://blog.hatena.ne.jp/{ID del propietario}/{ID del blog}/atomAutenticación: ID de Hatena de tu propia cuenta + clave de API
Si se confunden ambos, se obtiene 401 (la clave no es del propietario) o
403 (esa cuenta no tiene permisos sobre el blog).
Este servidor separa ambos con HATENA_BLOG_OWNER_ID y HATENA_ID, y
si se omiten, se tratan como el mismo ID, por lo que funciona con el mismo método de configuración tanto para blogs propios como compartidos.
Fuera del alcance
Subida de imágenes: fuera del alcance de AtomPub (existe la API de Hatena Fotolife por separado)
Cambio de diseño de las páginas fijas: no compatible con la API. Se configura desde el navegador
Autenticación OAuth: solo se admite la autenticación WSSE mediante clave de API
Desarrollo
pnpm run typecheck # 型チェック
pnpm test # ユニットテスト(API はモック)
pnpm run build # dist へビルド
pnpm run dev # ビルドせずに起動
pnpm run inspect # MCP Inspector で手動確認Como pnpm 10 bloquea por defecto los scripts de compilación de las dependencias, solo se permite esbuild, que usa tsx,
mediante pnpm.onlyBuiltDependencies en package.json.
Estructura
src/
index.ts エントリポイント(stdio トランスポート)
server.ts McpServer の組み立て
config.ts 環境変数の読み込み
hatena/
client.ts AtomPub の HTTP クライアント
wsse.ts WSSE 認証ヘッダの生成
atom.ts Atom XML のパース・生成
types.ts ドメイン型
tools/
blog.ts ブログ全体に対するツール
collection.ts 記事・固定ページ共通のツール定義
shared.ts ツールの共通ヘルパーComo los artículos y las páginas fijas tienen casi la misma estructura en AtomPub, registerCollectionTools de tools/collection.ts
se invoca con dos configuraciones distintas: una para artículos y otra para páginas fijas.
Licencia
MIT License. Consulta LICENSE para más detalles.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Create, manage, publish, and analyze Inblog content through AI agents.
Travel tools for AI agents: plan and edit real trips, search stays and tours, import travel videos.
Create, edit, organize, publish, and configure JustBlogged blogs from MCP clients.
SEO & marketing toolkit for AI agents: GA4, Search Console, AdSense, GTM, PageSpeed, Trends.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables searching and retrieving articles from Hatena Blog through Claude Desktop/Web. Supports keyword search, fetching recent posts, and retrieving post details by URL.1-
- AlicenseAqualityDmaintenanceEnables AI assistants to interact with the Google Blogger API v3 to manage blog posts and metadata. It supports the full post lifecycle including creating, updating, publishing, and deleting content through natural language.1017MIT
- FlicenseAqualityDmaintenanceEnables AI clients to manage Hexo blogs by providing tools for article CRUD operations, local previewing, and GitHub Pages deployment. It also supports site configuration access and automated Git backups to streamline the entire blogging workflow.121-
- AlicenseNot gradedqualityCmaintenanceEnables AI models to interact with Google Blogger blogs, manage posts, labels, and retrieve blog information via API key or OAuth2.19MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sumiVer2/hatena-blog-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server