
Tistory MCP (Unofficial)
io.github.jangsejongPublished by GitHub account jangsejongv0.2.0Updated Oct 29, 2026
Unofficial MCP server for Tistory blogs: publish, edit, drafts, images. Private by default.
Overview
Unofficial Tistory blog MCP server that lets an assistant read, write, edit, publish and delete your own blog posts, upload images and save drafts.
- What you can do
- Connect a blog session through a browser Kakao login and check whether the stored session is still valid
- List categories and browse your admin post list, including private posts, and read a post's rendered body
- Publish new posts from markdown, replace post bodies, and permanently delete posts with explicit confirmation
- Upload images and get body placeholders plus attachment references, and save drafts to the editor autosave slot
- Fetch public posts from any Tistory blog via RSS without logging in
- When to use it
- Useful if you write on a Tistory blog and want an assistant to draft, revise and publish posts from your own machine, with a human reviewing before anything goes public. Also handy for reading public posts from other Tistory blogs.
- Requirements
- Runs locally over stdio, installed with uvx or pipx from the PyPI package. Needs a browser for the one-time Kakao login (bundled Chromium, Chrome or Edge; the Chromium download is about 300MB). Login requires manual Kakao sign-in and KakaoTalk push approval. Optional environment variables: TISTORY_MCP_ALLOW_ANY_HOST, TISTORY_MCP_DAILY_CAP, TISTORY_MCP_MIN_INTERVAL_SEC, TISTORY_MCP_SESSION_STORE.
Installation
In SourceWeft
- Open Tistory MCP (Unofficial) in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
tistory-mcp
티스토리(Tistory) 블로그를 위한 AI 글쓰기 보조 MCP 서버 — Claude Code·Cursor 같은 MCP 클라이언트에서 내 블로그 글을 읽고, 쓰고, 다듬습니다. 공개 여부는 사람이 결정합니다.
An unofficial MCP server for Tistory blogs — an AI writing assistant where a human reviews before anything goes public.
[PyPI] [Python] [License: MIT] [CI]
[Install in VS Code] [Install in Cursor]
비공식 · 카카오/티스토리와 무관. 티스토리 Open API 는 2024년 2월에 종료되었습니다. 이 프로젝트는 브라우저에서 카카오 로그인을 한 번 마친 뒤 내 PC 에 저장한 쿠키로, 티스토리 관리자 화면이 쓰는 내부 JSON API 를 호출합니다. 카카오·티스토리와 아무 관계가 없고, 티스토리 내부가 바뀌면 언제든 멈출 수 있습니다. 엔드포인트 지식은 MIT 라이선스로 공개된 kim-se-hee/tistory-mcp 의 실측 문서를 따릅니다 — 그 프로젝트는 npm 에
tistory-mcp로 배포되는 별개의 TypeScript 프로젝트입니다.npx tistory-mcp와uvx tistory-mcp는 서로 다른 프로젝트이며, 이 저장소는 Python/PyPI 쪽입니다.
왜 tistory-mcp 인가
- 글쓰기는 AI, 공개는 사람. 발행 기본값이 비공개입니다. AI 가 쓴 글을 티스토리에서 직접 읽어 본 뒤 공개로 바꾸는 흐름이 기본이고, 공개 발행은 사용자가 명시적으로 요청해야 합니다.
- 내 PC 를 벗어나지 않습니다. 로그인 쿠키는 로컬 0600 파일(또는 OS keyring)에만 저장되고, 티스토리 외 어디에도 전송되지 않습니다. 텔레메트리 없음.
- 클라이언트를 가리지 않습니다. 표준 stdio MCP 서버라 Claude Code, Claude Desktop, Cursor, VS Code, Codex CLI, Gemini CLI 등 어디서나 같은 11개 도구를 씁니다.
기능
- 마크다운 → 티스토리 에디터 서식(
data-ke-*속성)이 붙은 HTML 변환. 제목·표·인용·목록·이미지가 에디터로 쓴 글처럼 보입니다(코드 블록은 일반<pre><code>로 나갑니다). - 새 글 발행(비공개 기본) · 본문 수정 · 삭제 · 카테고리 조회 · 비공개 글을 포함한 목록과 본문 조회.
- 이미지 업로드 — 본문에 넣을 치환자와 첨부 참조를 함께 돌려줘 이미지가 나중에 깨지지 않게 합니다.
- 에디터 자동저장 슬롯에 초안 저장("이어서 작성"으로 복원).
- 로그인 없이 아무 티스토리 블로그의 공개 글 RSS 조회.
- 터미널 CLI(
login/status/logout) — MCP 클라이언트의 도구 타임아웃을 피해 터미널에서 로그인.
안전 기본값
빠른 시작 (3단계)
1. 설치
uv 가 있으면 uvx 가 패키지를 받아 실행합니다.
로그인 창을 띄울 브라우저가 필요합니다. Chrome 또는 Edge 가 설치돼 있으면 이 단계는 건너뛰어도 됩니다 (로그인은 번들 Chromium → Chrome → Edge 순으로 시도).
pipx / pip 로 설치
이 경우 클라이언트 설정의 command 는 uvx 대신 tistory-mcp 로, args 는 빈 배열로 둡니다.
소스에서 (개발용)
개발 보조 스크립트:
2. 클라이언트에 등록
Claude Code 예시(다른 클라이언트는 아래):
3. 블로그 연결
새 세션을 열고 AI 에게 말합니다.
내 티스토리 블로그 myblog.tistory.com 연결해줘
브라우저 창이 뜨면 카카오 로그인 → 카카오톡 푸시 승인을 직접 마칩니다. 쿠키가 저장되면 끝입니다. 이후에는 세션이 만료될 때까지 브라우저 없이 동작합니다. 세션 수명은 일정하지 않습니다 — 실측(2026-10-27)에서 어떤 세션은 로그인 뒤 한 시간 남짓 만에 만료됐고, 다른 세션은 90분 동안 호출이 없어도 다섯 시간 가까이 유지됐다가 여섯 시간 쉬는 사이에 만료됐습니다. 만료되면 도구가 알려 주므로 다시 로그인하면 됩니다.
바로 써 볼 만한 요청:
./post.md를 '개발' 카테고리에 비공개로 올려줘. 태그는 python, mcp.
클라이언트별 설정
대부분의 클라이언트는 아래 한 줄이면 됩니다. 환경변수는 각 클라이언트의 env 항목으로 넘깁니다.
Claude Code
--scope user 는 모든 프로젝트에서, 생략(local)하면 현재 프로젝트에서만 보입니다. 프로젝트에 .mcp.json 을 두는 project 범위도 있습니다(이 저장소의 .mcp.json.example 참고).
플러그인으로 설치할 수도 있습니다(같은 uvx tistory-mcp 를 등록):
저장 후 Claude Desktop 을 완전히 종료했다가 다시 엽니다. macOS 의 GUI 앱은 셸의 PATH(~/.local/bin 등)를 못 볼 수 있으니 서버가 뜨지 않으면 command 에 which uvx 결과(절대경로)를 넣으세요.
Cursor
전역 ~/.cursor/mcp.json 또는 프로젝트 .cursor/mcp.json:
위의 "Install in Cursor" 버튼을 눌러도 같은 설정이 들어갑니다.
VS Code (Copilot)
워크스페이스 .vscode/mcp.json (VS Code 는 mcpServers 가 아니라 servers 키를 씁니다):
사용자 프로필에 두려면 명령 팔레트에서 MCP: Open User Configuration 으로 mcp.json 을 열어 같은 내용을 넣거나, 터미널에서 code --add-mcp '{"name":"tistory","type":"stdio","command":"uvx","args":["tistory-mcp"]}' 를 실행합니다. 위의 "Install in VS Code" 버튼도 같은 일을 합니다.
Codex CLI
또는 ~/.codex/config.toml:
Codex 의 도구 호출 제한(tool_timeout_sec)은 기본 60초라 브라우저 로그인이 그 안에 끝나기 어렵습니다. 같은 테이블에 tool_timeout_sec = 600 을 두거나, 터미널에서 tistory-mcp login myblog.tistory.com 으로 먼저 로그인해 두세요.
Gemini CLI
또는 ~/.gemini/settings.json (프로젝트는 .gemini/settings.json):
그 밖의 클라이언트는 위의 공통 JSON(mcpServers 형식)을 해당 클라이언트의 MCP 설정 파일에 넣으면 됩니다.
첫 로그인
tistory_session_init 도구(또는 AI 에게 "블로그 연결해줘")가 브라우저 창을 띄웁니다. 카카오 로그인과 카카오톡 푸시 승인은 사용자가 직접 합니다 — 이 2단계 인증은 자동화할 수 없고, 그래서 완전 무인 운영은 설계상 불가능합니다. 로그인이 끝나면 쿠키만 저장되고 창은 닫힙니다.
창이 안 뜨거나 클라이언트가 기다려 주지 않을 때의 대안 세 가지:
1) 터미널에서 로그인(권장) — MCP 클라이언트의 도구 타임아웃과 무관하게 최대 5분(--timeout)을 기다립니다.
2) 이미 떠 있는 브라우저에 붙기 (WSL · SSH · 컨테이너 등 화면이 없는 환경) — 화면이 있는 쪽(예: Windows 데스크톱)에서 원격 디버깅 포트를 열고 브라우저를 띄운 뒤, 서버에는 그 주소만 알려 줍니다.
붙은 브라우저의 쿠키를 읽어 오므로, 평소 쓰는 프로필 대신 전용 --user-data-dir 를 쓰는 것을 권합니다. CDP 주소는 기본적으로 loopback 만 허용됩니다.
3) 원격 서버 — 로컬 PC 에서 2) 처럼 브라우저를 띄운 뒤, 로컬 PC 에서 서버로 접속하면서 서버 쪽 포트를 내 브라우저로 역방향 포워딩합니다. 서버에서는 여전히 127.0.0.1:9222 로 보이므로 원격 허용 설정이 필요 없습니다.
도구
도구 설명은 영문과 한국어를 병기해 어느 언어로 대화해도 같은 안내를 받습니다.
이런 식으로 써보세요
발행 워크플로
AI 가 쓰고 사람이 검토한 뒤 공개하는 기본 흐름입니다.
tistory_get_categories— 카테고리 id 를 얻습니다(이름은 받지 않음).tistory_upload_image— 이미지마다 호출해substitution은 본문에,attachment_ref는attachments목록에 넣습니다.tistory_publish_post— 마크다운 본문으로 비공개 발행. 응답의 글 번호를 기억합니다.- 티스토리 관리자 화면에서 글을 읽어 봅니다. 고칠 게 있으면 AI 에게 말해
tistory_update_post로 본문을 다시 보냅니다(마크다운이면content_format="markdown"). - 마음에 들면
tistory_update_post에visibility="public"— 이때 비로소 공개됩니다.
발행이 오류나 타임아웃으로 끝났다면 바로 다시 호출하지 말고 tistory_list_posts 로 글이 생겼는지 먼저 확인하세요. 서버는 호출마다 새 글을 만듭니다.
환경변수
클라이언트 설정의 env 로 넘긴 값은 클라이언트를 다시 시작해야 반영됩니다.
세션 파일 위치 (file 저장소, 권한 0600):
같은 디렉터리의 ratelimit.json 이 속도 제한 상태입니다.
검증 현황
11개 도구 모두 실제 블로그에서 확인했습니다(2026-10-27, 비공개 테스트 글로 검증 뒤 삭제). 티스토리 쪽 변경으로 동작이 달라지면 이슈로 알려 주세요(쿠키·세션 파일은 첨부하지 마세요).
문제 해결 / FAQ
더 자세한 내용은 docs/TROUBLESHOOTING.md.
- "세션이 만료되었습니다" — 로그인 세션 쿠키(
TSSESSION)는 만료일이 없는 세션 쿠키라 서버 쪽에서 끊깁니다. 실측에서는 한 시간 남짓 만에 만료된 세션도, 다섯 시간 가까이 유지되다 여섯 시간 쉬는 사이에 만료된 세션도 있어 수명을 예측할 수 없습니다. 하룻밤 지나면 다시 로그인한다고 보면 됩니다.tistory_session_init을 다시 실행하거나 터미널에서tistory-mcp login myblog.tistory.com. Executable doesn't exist/ 브라우저를 찾지 못함 —tistory-mcp install-browser로 Chromium 을 받거나 Chrome/Edge 를 설치하세요. 로그인은 번들 Chromium → Chrome → Edge 순으로 시도합니다.- 로그인 창이 안 보임 (WSL · SSH · 컨테이너) — 화면이 있는 쪽에서
--remote-debugging-port=9222로 브라우저를 띄우고cdp_url로 붙으세요. 첫 로그인 참고. - 로그인 중 클라이언트가 타임아웃 — 터미널에서
tistory-mcp login myblog.tistory.com으로 먼저 로그인해 두면 도구는 저장된 쿠키만 씁니다. Codex CLI 는tool_timeout_sec, Claude Code 는 서버 항목의timeout으로 제한을 늘릴 수도 있습니다. - 커스텀 도메인 블로그 —
blog_url은 원래 주소myblog.tistory.com을 권장합니다. 커스텀 도메인을 그대로 써야 하면TISTORY_MCP_ALLOW_ANY_HOST=1. - "간격 제한" / "일일 상한" 오류 — 기본 60초·20회/일 입니다.
TISTORY_MCP_MIN_INTERVAL_SEC,TISTORY_MCP_DAILY_CAP으로 조정(0 = 해제). 상한은 발행·수정 합산이며TISTORY_MCP_HOME/ratelimit.json에 기록됩니다. - 이미지가 15일쯤 뒤에 깨짐 — 발행·수정 때
attachments에attachment_ref를 넣지 않은 경우입니다. 해당 글을tistory_update_post로 다시 보내면서attachments를 채우세요(이미지는 다시 업로드). - 태그 표기가 바뀜 — 이미 쓰던 태그와 대소문자·띄어쓰기만 다른 태그는 기존 표기로 합쳐지는 것으로 보입니다. 티스토리 쪽 동작입니다.
- 두 대의 PC 에서 같은 블로그에 로그인 — 동시 로그인 시 한쪽 세션이 끊기는지 확인되지 않았습니다. 한 PC 에서 쓰는 것을 권합니다.
update_post에 마크다운을 보냈더니 기호가 그대로 보임 —update_post의content_format기본값은html입니다. 마크다운이면content_format="markdown"을 명시하세요(publish_post는 기본markdown).get_post본문이 마크다운이 아님 — 티스토리는 마크다운을 저장하지 않습니다. 돌아오는 것은 스킨으로 렌더된 HTML 이며, 수정할 때는 그 HTML 을 되돌려 보내지 말고 새 본문을 써서 보내세요.
한계와 면책
- 비공식입니다. 티스토리가 내부 API 를 바꾸면 예고 없이 동작이 멈출 수 있습니다.
- 이 도구의 사용은 티스토리·카카오 약관과 충돌할 수 있습니다. 계정 제한 등 모든 위험은 사용자 본인이 집니다.
- 완전 무인 운영은 불가능합니다(카카오톡 푸시 승인). 세션은 짧으면 한 시간 남짓 만에 만료되므로(실측), 도구가 만료를 알리면 다시 로그인해야 합니다.
- 속도 제한은 프로세스 안에서만 직렬화됩니다. 두 클라이언트가 동시에 발행하면 간격 검사가 겹칠 수 있습니다.
- 텔레메트리·외부 서버 없음. 쿠키는 티스토리로 보내는 요청 외에는 이 PC 를 떠나지 않습니다.
허용하지 않는 사용
- 대량·반복 발행, 같은 글을 여러 블로그에 뿌리기, 스팸.
- 검색엔진 조작을 노린 글 양산.
- 본인 소유가 아닌 블로그·계정에 글 쓰기.
- 티스토리·카카오 약관이 금지하는 행위 전반.
이 프로젝트는 내 블로그를 위한 글쓰기 보조이며, 공개 전에 사람이 읽는 것을 전제로 만들었습니다.
보안
- 저장된 쿠키는 블로그 관리자 권한 그 자체입니다. 세션 파일을 복사·공유하지 마세요.
- 이슈·PR 에 쿠키, 세션 JSON, HAR, 스크린샷 속 토큰을 절대 첨부하지 마세요.
- 텔레메트리 없음. 네트워크 요청은 로그인한 티스토리 호스트와 RSS 조회 대상 블로그로만 나갑니다.
- 취약점 신고 절차는 SECURITY.md.
기여
버그 신고와 PR 을 환영합니다 — CONTRIBUTING.md. 내부 구조는 docs/ARCHITECTURE.md. 테스트는 네트워크 없이 돕니다(pytest, 모의 HTTP).
라이선스
감사
- kim-se-hee/tistory-mcp (MIT) — 티스토리 내부 엔드포인트를 실측해 정리한
docs/api.md. 이 저장소의 엔드포인트 지식은 그 문서를 따릅니다. npm 에 배포되는 별개의 TypeScript 프로젝트입니다. - aiarchitecturedev/aiarchitect-blog-mcp — 도구 annotation 과 fail-closed 패턴을 참고했습니다.
Changelog
v0.2.0 (2026-10-27)
- 문서: 세션 수명 서술 정정 — "며칠~몇 주"가 아니라 실측 한 시간 남짓 만에 만료될 수 있음(
TSSESSION은 만료일 없는 세션 쿠키) - 문서: 마크다운 변환 설명 정정 — 에디터 서식 속성은 제목·표·인용·목록에만 붙고 코드 블록은 일반
<pre><code> - 문서: 세션 수명 서술 보강 — 한 시간 남짓 만에 만료된 세션도, 90분 무호출을 포함해 다섯 시간 가까이 유지되다 여섯 시간 무호출 사이에 만료된 세션도 있었음(실측 2026-10-27~28, 수명 예측 불가)
- 저장소:
.gitignore에/_private/(로컬 전용 내부 자료 폴더) 추가
첫 공개 릴리스.
- 도구 11개 — 세션(
init/status), 카테고리, 글 목록·조회, 공개 RSS, 발행·수정·삭제, 이미지 업로드, 자동저장 초안. 도구 설명·title 영문+한국어 병기. - 안전 기본값 — 비공개 발행, 삭제
confirm+destructiveHint, 발행·수정 속도 제한(60초·하루 20회, 스레드 락),*.tistory.com한정, CDP loopback 한정, nh3 본문 정화. - 이미지 치환자 엄격 검증 — 비공개 0.1.x 에서 발견된 sanitize 우회를 수정.
- 발행 실패 뒤 재시도 시 중복 글 경고.
- 로그인 — 번들 Chromium → Chrome → Edge 순 폴백,
cdp_url로 외부 브라우저 접속, keyring 오류 안내. - 배포 — PyPI
tistory-mcp(uvx tistory-mcp), CLI 서브커맨드install-browser/login/status/logout/--version. tistory_list_posts— 공개 범위 필터를 서버 어휘(visible/hidden/protect)로 매핑(다른 값은 서버가 400).search_type에tag추가, 서버가 거부하는all제거.- 실계정 검증 — 11개 도구 전부 실제 블로그에서 확인(비공개 테스트 글로 검증 뒤 삭제).
- Python ≥3.11.
- 비공개 개발 단계(v0.1.0
v0.1.4, 2026-0910)의 이력은 이 항목으로 요약.
Source: README.md at commit 1fab2ef
Tools
0Version history
1- v0.2.0LatestOct 29, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts