Blogger MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Blogger MCPcreate a draft post about today's project update"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Blogger MCP
TypeScript MCP server for Blogger drafts, post management, project devlogs with screenshots, and Strava running retrospectives.
한국어 안내
Blogger MCP는 Codex, Claude 같은 MCP 클라이언트에서 Blogger 글을 작성하고 관리하기 위한 TypeScript 기반 MCP 서버입니다. 기본 동작은 항상 초안 생성이며, 실제 게시는 publish_blogger_post를 명시적으로 호출할 때만 실행됩니다.
주요 기능:
Blogger 글 초안 생성
최근 글/초안 목록 조회
기존 글 수정
명시적 게시
Google OAuth refresh token 로컬 저장
Markdown을 HTML로 변환해 Blogger 본문에 삽입
이미지 URL 또는 로컬 이미지 경로를 글에 삽입
프로젝트 개발일지 초안 생성
Strava 활동 데이터 기반 러닝 회고 초안 생성
빠른 시작
git clone https://github.com/powerofdeen/BloggerMCP.git
cd BloggerMCP
npm install
cp .env.example .env
npm run build.env에 Blogger용 Google OAuth 값과 블로그 ID를 입력합니다.
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GOOGLE_REDIRECT_URI=http://localhost:3000/oauth2callback
BLOGGER_BLOG_ID=...Google OAuth 로그인을 진행합니다.
npm run oauth:google터미널에 출력된 Google 로그인 URL을 열고 승인하면, http://localhost:3000/oauth2callback에서 refresh token이 자동으로 저장됩니다. 토큰은 .tokens/google.json에 저장되며 Git에는 포함되지 않습니다.
Codex에 등록
codex mcp add blogger -- /opt/homebrew/bin/npm --prefix /Users/powerofdeen/Documents/BloggerMCP run start등록 확인:
codex mcp listCodex에서 /mcp를 입력해도 blogger 서버가 보이는지 확인할 수 있습니다.
Claude Desktop에 등록
macOS 기준 Claude Desktop 설정 파일:
~/Library/Application Support/Claude/claude_desktop_config.json설정 예시:
{
"mcpServers": {
"blogger": {
"command": "/opt/homebrew/bin/npm",
"args": [
"--prefix",
"/Users/powerofdeen/Documents/BloggerMCP",
"run",
"start"
]
}
}
}저장 후 Claude Desktop을 완전히 종료했다가 다시 실행하면 됩니다.
사용 예시
초안 생성:
create_blogger_draft로 제목은 "테스트 글", 본문은 "## 테스트\nBlogger MCP로 만든 첫 초안입니다."로 초안 만들어줘최근 글/초안 조회:
list_blogger_posts로 최근 글과 초안 보여줘프로젝트 개발일지 초안 생성:
create_project_devlog_draft로 프로젝트명 BloggerMCP, 오늘 작업 내용은 "Blogger MCP 서버 구현", "OAuth callback helper 추가"로 초안 만들어줘게시:
publish_blogger_post로 postId="POST_ID" confirmPublish=true 실행해줘제공 도구
blogger_login: Google OAuth 로그인 URL 생성 또는 OAuth code 교환create_blogger_draft: Markdown 기반 Blogger 초안 생성list_blogger_posts: 최근 글/초안 목록 조회update_blogger_post: 기존 Blogger 글 수정publish_blogger_post: 명시적 게시score_blog_post: 글 구조와 SEO 기본 점수 확인upload_post_image: 이미지 URL 또는 로컬 이미지 삽입 준비create_project_devlog_draft: 프로젝트 개발일지 초안 생성create_strava_activity_draft: Strava 활동 기반 러닝 회고 초안 생성
안전 원칙
기본은 항상 초안 생성입니다.
게시하려면
publish_blogger_post를 명시적으로 호출해야 합니다.publish_blogger_post에는confirmPublish: true가 필요합니다..env,.tokens는 Git에 올리지 않습니다.client secret, access token, refresh token은 로그나 응답에 출력하지 않습니다.
Related MCP server: MCP Docs RAG Server
Features
Create Blogger posts as drafts by default.
List recent live posts and drafts.
Update existing posts without publishing.
Publish only through
publish_blogger_postwithconfirmPublish: true.Store Google OAuth refresh tokens locally.
Convert Markdown input to Blogger HTML.
Insert image URLs or local images into post HTML.
Auto-detect latest screenshots from a
screenshotsdirectory.Separate Strava OAuth/client module for running retrospective drafts.
No client secret, access token, or refresh token is logged or returned.
Setup
npm install
cp .env.example .env
npm run buildFill .env:
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GOOGLE_REDIRECT_URI=http://localhost:3000/oauth2callback
BLOGGER_BLOG_ID=...
STRAVA_CLIENT_ID=...
STRAVA_CLIENT_SECRET=...
STRAVA_REDIRECT_URI=http://localhost:3000/strava/callbackGoogle Cloud / Blogger API
Open Google Cloud Console.
Create or select a project.
Enable Blogger API v3.
Configure OAuth consent screen.
Create an OAuth client ID.
Add the redirect URI from
.env, for examplehttp://localhost:3000/oauth2callback.Copy client ID and client secret into
.env.Find your Blogger blog ID in Blogger settings or via Blogger API and set
BLOGGER_BLOG_ID.
First login:
Recommended local callback flow:
npm run oauth:googleThen open the printed Google OAuth URL. After approval, the local
http://localhost:3000/oauth2callback page stores the refresh token and shows a
success message.
Manual fallback:
Call MCP tool
blogger_loginwith nocode.Open the returned
authUrl.Copy the
codequery parameter from the redirect URL.Call
blogger_loginagain with thatcode.
The refresh token is stored under .tokens/google.json.
Strava Setup
Create an app at Strava API Settings.
Set the callback domain/redirect to match
STRAVA_REDIRECT_URI.Put
STRAVA_CLIENT_IDandSTRAVA_CLIENT_SECRETin.env.Call
create_strava_activity_draftwithmode: "auth_url".Open the URL, approve access, then call the tool with
mode: "exchange_code"and the returned code.
The Strava token is stored under .tokens/strava.json.
MCP Configuration
Example:
{
"mcpServers": {
"blogger": {
"command": "node",
"args": ["/absolute/path/to/BloggerMCP/dist/server.js"],
"env": {
"NODE_ENV": "production"
}
}
}
}For local development:
{
"mcpServers": {
"blogger-dev": {
"command": "npm",
"args": ["run", "dev"],
"cwd": "/absolute/path/to/BloggerMCP"
}
}
}Tools
blogger_login
Returns a Google OAuth URL, or exchanges an OAuth code and stores a refresh token.
create_blogger_draft
Creates a draft post from Markdown.
Inputs include:
titlemarkdownlabelsimageUrlsimagePathsaltTexts
Local image paths require:
BLOGGER_IMAGE_ASSET_DIR=public/blogger-assets
BLOGGER_IMAGE_PUBLIC_BASE_URL=https://your-site.example/blogger-assetsIf image upload/copy fails, draft creation continues and warnings are returned.
list_blogger_posts
Lists recent posts. Use status: ["draft"] for drafts only.
update_blogger_post
Patches title, content, labels, and optional images. It does not publish.
publish_blogger_post
Publishes a post only when called explicitly:
{
"postId": "123",
"confirmPublish": true
}score_blog_post
Scores title length, heading structure, content depth, images, wrap-up, and SEO labels.
upload_post_image
Prepares image URLs for post insertion. Supports:
pngjpgjpegwebp
create_project_devlog_draft
Creates a structured devlog draft:
오늘 한 일
문제 상황
해결 방법
결과 화면
배운 점
다음 작업
It can auto-load latest images from screenshots under projectDir, plus explicit screenshotPaths.
create_strava_activity_draft
Modes:
auth_urlexchange_codelist_recentcreate_draft
The running retrospective includes distance, time, average pace, average heart rate, elevation, activity name, date, and lap pace data when available.
Image Storage Design
Blogger API image upload support is limited, so image handling is separated behind ImageStorage.
Current adapters:
URL images: directly inserted as
<img src="...">.Local public assets: copy local files into
BLOGGER_IMAGE_ASSET_DIR, then build URLs fromBLOGGER_IMAGE_PUBLIC_BASE_URL.
Future adapters can add Google Photos, Google Drive, S3, or another CDN without changing Blogger tools.
Safety Notes
Draft creation is the default.
Nothing publishes unless
publish_blogger_postis explicitly called.publish_blogger_postrequiresconfirmPublish: true.Client secrets and tokens must stay in
.envand.tokens..envand.tokensare ignored by git.
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.
Latest Blog Posts
- 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/powerofdeen/BloggerMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server