Blog
Personal blog drafts are an HTTP source of record. Same OAuth access token as https://mcp.wrok.app/mcp and job-applications. MCP Agency stays career-only — no blog tools.
Bot path — OAuth Bearer
Authorization: Bearer <oauth_access_token>
Host: https://mcp.wrok.app
Discover https://mcp.wrok.app → same OAuth consent as MCP → Bearer access (+ refresh when live). Never mint or send wrok_sk_. Never prefer fly.dev.
Status: idea → draft → ready → (optional) site_published. Mark with PUT. Public personal-site publish is GitHub MDX only after Sravan sign-off. Never POST /api/v1/blog-posts/{id}/publish.
The Editor may send a signed-in session JWT via the web BFF. That is not the bot install path.
Writing preferences
Set default writing style, tone, and tags so drafts match your voice.
curl -X PUT https://mcp.wrok.app/api/v1/blog-preferences \
-H "Authorization: Bearer <oauth_access_token>" \
-H "Content-Type: application/json" \
-d '{
"writing_style": "technical",
"tone": "conversational",
"default_tags": ["engineering", "career"],
"default_category": "tech"
}'Create a draft
curl -X POST https://mcp.wrok.app/api/v1/blog-posts \
-H "Authorization: Bearer <oauth_access_token>" \
-H "Content-Type: application/json" \
-d '{
"title": "Why I Switched from Node to Go",
"content": "After 5 years of writing Node.js backends...",
"description": "A practical comparison after migrating a production system.",
"tags": ["go", "nodejs", "backend"],
"category": "tech",
"status": "idea"
}'List, get, mark ready
# List posts (optional ?status=idea|draft|ready|site_published)
curl "https://mcp.wrok.app/api/v1/blog-posts?status=ready" \
-H "Authorization: Bearer <oauth_access_token>"
# Get a specific post
curl https://mcp.wrok.app/api/v1/blog-posts/{post_id} \
-H "Authorization: Bearer <oauth_access_token>"
# Mark ready (personal-site SoR — never …/publish)
curl -X PUT https://mcp.wrok.app/api/v1/blog-posts/{post_id} \
-H "Authorization: Bearer <oauth_access_token>" \
-H "Content-Type: application/json" \
-d '{"status": "ready"}'