Skip to main content
Glama
tutul
by tutul

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BLOGGER_MCP_HOMENoDirectory for credentials~/.config/blogger-mcp
BLOGGER_MCP_TOKENNoCached token$BLOGGER_MCP_HOME/token.json
BLOGGER_MCP_READONLYNoSet to '1' to request the read-only scope
BLOGGER_MCP_CLIENT_SECRETSNoOAuth client JSON$BLOGGER_MCP_HOME/client_secret.json

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_blogsA

List the blogs the authorized Google account can access.

Use this to discover a blog_id when you do not already have one. Every other tool requires the caller to pass blog_id explicitly.

get_blogA

Look up one blog by its id, or by its public URL.

Pass exactly one of blog_id or url (e.g. "https://example.blogspot.com/").

list_postsA

List posts in a blog.

status filters to LIVE / DRAFT / SCHEDULED / SOFT_TRASHED (omit for all). labels is a comma-separated list. start_date/end_date are RFC 3339 timestamps. Bodies are omitted by default — pass fetch_bodies=True only when you actually need the HTML, since post bodies are large.

get_postA

Fetch one post in full, including its HTML body and sync metadata.

Always call this before update_post so you are editing against the current content rather than a stale copy.

search_postsA

Full-text search over the published posts of a blog.

Note this only covers live posts; drafts are not indexed. To find a draft, use list_posts with status="DRAFT".

create_postA

Create a post. Creates a DRAFT by default.

Publishing is a separate, explicit step: call publish_post afterwards. Only set draft=False when a human has asked for immediate publication.

content_format="html" sends content through untouched — Blogger stores post bodies as raw HTML. content_format="text" escapes the text and wraps it in paragraphs. There is no Markdown support and no image upload: any in the HTML must already point at a public absolute URL.

Blogger cannot store per-post metadata of your own (its customMetaData field silently discards writes), so there is no way to record which local file a post came from. Track that outside this server if you need it.

update_postA

Update a post, sending only the fields you pass (PATCH semantics).

Omitted fields are left untouched, so you can change just the title without resending the body. Two things to know:

  • labels REPLACES the whole label list. To add one label, read the current list with get_post first and pass the full new list.

  • publish=False (the default) does not unpublish anything — a live post stays live. It only means "do not publish a draft as part of this edit". Use revert_post to take a live post back to draft.

publish_postA

Publish a draft post, making it publicly visible.

This is the irreversible-feeling step — confirm with the human before calling it unless they already asked for publication.

Pass publish_date as an RFC 3339 timestamp (e.g. "2026-09-10T09:00:00Z") to schedule publication for a future time instead of publishing now; the post then sits in SCHEDULED status until then.

revert_postA

Take a live or scheduled post back to DRAFT, removing it from the blog.

The content is kept; only its visibility changes. This is the safe way to pull a post down.

delete_postA

Delete a post. Treat this as irreversible and confirm with a human first.

useTrash is sent unless permanent=True, but it buys nothing you can act on: a deleted post returns 404 and never shows up in a SOFT_TRASHED listing (verified against the live API). Whether Blogger's own web UI can still restore it is not something the API can tell you.

If the goal is to take a post off the public blog, use revert_post instead — it keeps the content and is trivially undone by publishing again.

list_pagesA

List the static pages of a blog (About, Contact, ...).

Pages differ from posts: no labels, no dates in the archive, and they do not appear in the blog's post feed.

get_pageA

Fetch one static page in full, including its HTML body.

create_pageA

Create a static page. Creates a DRAFT by default.

Same content rules as create_post: raw HTML or plain text, no Markdown, no image upload.

update_pageB

Update a static page, sending only the fields you pass (PATCH semantics).

Set publish=True to publish a draft page as part of the edit.

delete_pageB

Delete a static page. Treat this as irreversible (see delete_post).

list_commentsA

List comments on one post, or across the whole blog if post_id is omitted.

Use status="PENDING" to find comments waiting for moderation.

moderate_commentA

Moderate one comment.

  • approve — publish a pending comment (also un-spams it)

  • spam — mark as spam and hide it

  • remove_content — blank the text but leave the "comment removed" stub

  • delete — remove it entirely; this one is NOT recoverable, so confirm with the human first

The Blogger API cannot create comments, so replying to a commenter has to be done by hand in the Blogger UI.

get_pageviewsA

Blog-level pageview counts.

Blogger only exposes three coarse buckets and the numbers are approximate — treat them as a rough signal, not analytics. There is no per-post breakdown.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/tutul/blogger-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server