Publishes posts to Blogger blogs and reads blogs/posts via the Blogger API v3. Handles drafts, publishing, updating, and listing posts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/acedatacloud-ai-media:bloggerWhen to use
Trigger when the user wants to publish a post to their Blogger blog, list their blogs, list / read posts on a blog, or update an existing post. The connector grants the Blogger scope (read + write); confirm before publishing publicly (you can insert as a draft first).
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Call the **Blogger API v3** with `curl + jq`. The user's OAuth bearer token is
Call the Blogger API v3 with curl + jq. The user's OAuth bearer token is
in $GOOGLE_BLOGGER_TOKEN; every call needs
Authorization: Bearer $GOOGLE_BLOGGER_TOKEN. Base URL:
https://www.googleapis.com/blogger/v3.
Errors are {"error": {"code": ..., "message": ...}} — show them verbatim.
401 → token expired, re-connect the Blogger connector.
Always start by listing the user's blogs to get a blogId:
curl -sS -H "Authorization: Bearer $GOOGLE_BLOGGER_TOKEN" \
"https://www.googleapis.com/blogger/v3/users/self/blogs" \
| jq '.items[] | {id, name, url}'
Confirm before publishing publicly. Use ?isDraft=true to stage a draft.
BLOG_ID="1234567890"
jq -n --arg t "My title" --arg c "<p>HTML content of the post…</p>" \
'{kind:"blogger#post", title:$t, content:$c, labels:["ai","video"]}' \
| curl -sS -X POST \
"https://www.googleapis.com/blogger/v3/blogs/$BLOG_ID/posts/?isDraft=false" \
-H "Authorization: Bearer $GOOGLE_BLOGGER_TOKEN" \
-H "Content-Type: application/json" \
-d @- \
| jq '{id, url, status}'
content is HTML (not Markdown) — convert Markdown to HTML first
(e.g. with pandoc -f markdown -t html or a simple converter).
POST /blogs/{blogId}/posts/{postId}/publish.PUT /blogs/{blogId}/posts/{postId} with the same shape.curl -sS -H "Authorization: Bearer $GOOGLE_BLOGGER_TOKEN" \
"https://www.googleapis.com/blogger/v3/blogs/$BLOG_ID/posts?maxResults=20&status=live" \
| jq '.items[] | {id, title, url, published}'
accessNotConfigured.content must be HTML; passing raw Markdown will render literally.&pageToken=$PAGE_TOKEN from the previous .nextPageToken.npx claudepluginhub acedatacloud/skills --plugin acedatacloud-ai-mediaCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.