글쓰기 API

Claude 같은 AI 도구나 스크립트가 내 블로그에 글을 쓰게 하는 방법입니다. 토큰은 설정에서 발급합니다.

Claude에 연결하기 (MCP)

주소만 추가하면 브라우저 로그인 창이 뜨고, 허용을 누르면 연결됩니다. 토큰을 복사할 필요가 없습니다.

claude mcp add --transport http latuis-blog https://blog.latuis.com/api/v1/mcp
브라우저 OAuth 동의 화면 — '연결을 허용할까요?' 아래 블로그 확인·글 작성(기본 임시글)·이미지 업로드 권한이 표시되고, 허용을 누르면 연결이 끝난다

Claude 데스크톱·웹은 설정 > 커넥터 > 커스텀 커넥터 추가에 같은 주소를 넣으면 됩니다. 추가 화면이 인증 방식과 OAuth 클라이언트를 묻는데, 이 서버는 둘 다 자동으로 감지되므로 기본값 그대로 두면 됩니다 — 인증 "항상 필요", OAuth 클라이언트 "클라이언트 ID 없음(자동으로 등록)". 추가 요청 헤더도 넣을 필요 없습니다.

Claude의 커스텀 커넥터 추가 화면 — latuis-blog 주소를 넣으면 인증 '항상 필요'와 OAuth 클라이언트 '클라이언트 ID 없음(자동으로 등록)'에 감지됨 표시가 붙는다. 그대로 추가하면 된다

Claude Code(터미널)는 위 명령으로 추가한 뒤 /mcp에서 인증을 시작하면(대화로 "연결해줘"라고 해도 됩니다) 브라우저 승인 창이 열립니다. 승인 후 브라우저에 localhost 연결 오류가 떠도 실패가 아닙니다 — 원격 서버·컨테이너처럼 브라우저와 터미널이 다른 기기인 경우로, 주소창의 http://localhost:…/callback?code=… 전체 주소를 복사해 터미널에 붙여넣으면 연결이 끝납니다.

터미널의 Claude Code 화면 — 연결 요청에 authenticate 도구가 승인 주소를 열어 주고, localhost 콜백 URL을 붙여넣자 complete_authentication 으로 연결이 끝나 도구 4개가 사용 가능해진다

연결은 설정 > AI 글쓰기 토큰 목록에 나타나고, 삭제하면 즉시 끊깁니다. 토큰을 직접 발급해 --header "Authorization: Bearer lbk_…" 로 붙이는 방식도 그대로 됩니다.

연결 후 Claude에서: "오늘 공부한 내용 정리해서 블로그에 올려줘". Claude가 write_post 도구로 글을 쓰며, 기본은 임시글입니다 — 확인하고 발행하거나, 발행까지 시키면 바로 공개됩니다. 도구는 get_my_blog · list_posts · get_post · write_post 네 가지입니다. 이미지는 MCP 도구가 아니라 아래 이미지 항목의 업로드 API를 같은 토큰으로 쓰면 됩니다 — Claude Code라면 직접 curl로 올리고 받은 주소를 본문에 넣습니다.

터미널의 Claude Code 화면 — 블로그에 올려달라는 요청에 write_post 도구가 실행되어 임시글로 저장되고, 발행은 스튜디오에서 하라고 안내한다
스튜디오 글 관리 화면 — 방금 저장된 글이 임시 배지로 목록 맨 위에 있고, 미리보기·수정 링크로 확인한 뒤 편집 화면에서 발행하면 공개된다

ChatGPT·다른 AI 도구에 연결하기

MCP는 특정 회사 전용이 아니라 공개 표준이라, MCP를 지원하는 도구라면 같은 주소로 연결됩니다.

https://blog.latuis.com/api/v1/mcp

ChatGPT는 유료 플랜의 설정 > 커넥터에서 개발자 모드를 켠 뒤 커넥터로 위 주소를 추가하면 Claude와 똑같이 브라우저 로그인 창이 뜨고, 허용하면 연결됩니다(메뉴 이름은 버전에 따라 조금 다를 수 있습니다). Cursor 등 MCP를 지원하는 다른 도구도 방식은 같습니다 — 주소를 넣고, OAuth 로그인이 안 되는 도구라면 설정에서 토큰을 발급해 Authorization: Bearer lbk_… 헤더로 붙이면 됩니다. 어느 도구로 연결하든 쓰는 도구 네 가지와 "기본은 임시글" 원칙은 동일합니다.

인증

모든 요청에 Authorization: Bearer lbk_… 헤더를 넣습니다. 토큰은 발급 시 한 번만 보이며, 유출되면 설정에서 삭제하세요.

토큰 확인

curl -H "Authorization: Bearer $TOKEN" https://blog.latuis.com/api/v1/me

글 쓰기

마크다운을 권장합니다. publish 를 생략하면 새 글은 임시글로 저장됩니다 — AI 가 쓴 글은 사람이 확인하고 발행하는 흐름을 권장합니다. 이미 발행된 글을 post_id 로 수정할 때는 publish 를 생략해도 발행 상태가 유지됩니다(임시글로 내려가지 않습니다).

curl -X POST https://blog.latuis.com/api/v1/posts \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "오늘 배운 것",
    "content_markdown": "## 요약\n\n본문입니다. **강조**와 `코드`, 목록을 쓸 수 있습니다.",
    "tags": ["til", "spring"],
    "publish": false
  }'

응답에는 post_id·url·cover(실제로 커버가 될 이미지)와 warnings 배열이 옵니다. warnings 는 저장을 막지 않는 안내입니다 — 커버 없음/작음, 요약 없음, 태그 없음처럼 사람이 발행 화면에서 보는 것과 같은 내용이니 AI 클라이언트는 이걸 사용자에게 전하거나 고쳐서 다시 저장하세요.

# 응답 예
{"success": true, "data": {"post_id": 12, "status": "DRAFT", "url": "…", "cover": "/uploads/blog/….jpg",
  "warnings": ["excerpt(요약)가 없어 본문 앞 160자가 자동으로 쓰입니다. …"]}}

응답의 post_id 로 같은 글을 수정할 수 있습니다 ("post_id": 123 을 본문에 포함). 발행 전까지는 제목을 바꾸면 주소(슬러그)도 따라 바뀌고, 발행하면 주소가 고정됩니다.

필드

필드설명
title150자. 발행 시 필수 — 임시글은 제목 없이도 저장됩니다
content_markdown마크다운 본문 (권장)
content_htmlHTML 본문 — 허용 태그 외에는 서버에서 제거됩니다
tags최대 5개. 영문 소문자·숫자·한글·하이픈만 남습니다
excerpt요약 300자 (검색·공유 카드용). 비우면 본문에서 자동
publishtrue 발행 / 생략 시 새 글은 임시글, 발행된 글 수정이면 발행 유지
post_id있으면 해당 글 수정
cover_image커버 이미지 경로 (/api/v1/images 로 올린 /uploads/blog/…). 생략하면 본문 첫 이미지가 커버. 가로 1200px 이상이면 검색·공유 카드에 크게 보입니다

이미지

외부 이미지 주소는 본문에서 제거됩니다. 먼저 업로드하고 받은 경로를 그대로 마크다운에 쓰세요. 상대 경로 그대로 쓰는 것이 기본이고, 앞에 https://blog.latuis.com을 붙인 절대 주소도 같은 이미지로 인식합니다.

curl -X POST https://blog.latuis.com/api/v1/images \
  -H "Authorization: Bearer $TOKEN" \
  -F "[email protected]"
# → {"data": {"url": "/uploads/blog/….jpg", "width": 1600, "height": 900}}
#    가로 1200px 미만이면 "hint" 가 함께 옵니다 — 본문용이면 무시해도 되고, 커버로 쓸 거면 더 큰 원본을 올리세요
# 본문: ![설명](/uploads/blog/….jpg)

파일 하나는 10MB까지, 한 계정이 하루에 올릴 수 있는 양은 200장 · 100MB입니다(브라우저에서 올린 것과 합산). 넘으면 {"success": false, "message": "…다 썼습니다"}가 돌아오고, 자정이 지나면 다시 올릴 수 있습니다. 올린 이미지는 긴 변 1600px로 줄이고 JPEG로 다시 저장합니다(EXIF 제거).

내 글 목록

curl -H "Authorization: Bearer $TOKEN" https://blog.latuis.com/api/v1/posts

글 하나 읽기

curl -H "Authorization: Bearer $TOKEN" https://blog.latuis.com/api/v1/posts/{post_id}

기존 글을 고치기 전에 현재 본문을 읽는 용도입니다. POST /api/v1/postspost_id 를 주면 본문 전체가 바뀌니 먼저 읽고 고치세요. content_markdown 은 이 API로 쓴 글에만 있습니다. 웹 에디터로 고친 글은 null 이고 content_html 이 원본입니다. notes 배열에 원문 없음·저장 안 된 수정본 있음 같은 안내가 옵니다.