velog_get_post
벨로그 글 읽기
벨로그 글 하나를 본문까지 읽어온다. username + url_slug 조합이나 글 id 로 지정한다. 예: https://velog.io/@velopert/react-context-tutorial → username="velopert", url_slug="react-context-tutorial"
idurl_slugusername
io.github.milcho0604由 GitHub 账号 milcho0604 发布v0.9.6更新于 Oct 29, 2026
Claude 나 Codex 에서 벨로그(velog.io) 글을 읽고 쓰고 백업한다. 다이어그램과 시퀀스도 그린다. 공개 발행은 사람이 켤 때만 열린다.
在 MCP 客户端中读取、搜索、起草、发布和备份 Velog(velog.io)博客文章,并可生成图表和封面图。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
[npm] [Node] [License] [Runtime deps]
벨로그를 Claude 같은 MCP 클라이언트에서 다루는 서버. 글을 읽고, 초안을 쓰고, 발행하고, 통째로 백업한다.
[Claude 에서 초안을 쓰고, 조회수 상위 글을 뽑고, 구성도를 그리는 시연]
벨로그 MCP 서버가 이미 둘 있다. 이 구현은 세 가지가 다르다.
1. 발행은 기본값이 아니라 권한이다. 설치 직후에는 초안 작성과 비공개 발행까지 된다. 공개 발행은 환경변수를 넣어야 열린다. 그 스위치는 모델이 못 건드린다 — MCP 설정 파일을 여는 사람만 바꿀 수 있다.
2. 벨로그 동작을 추측하지 않고 실측했다. 벨로그 GraphQL 은 비공식이라 문서가 없다. 이 레포는 실제로 어떻게 동작하는지를 velog-io/velog 소스와 실호출로 확인해 기록한다. 서버 쪽 함정 6가지가 docs/api-reference.md 에 있다 — 오류 없이 빈 결과를 주는 경우, 발행글을 비공개로 만드는 경우 포함.
3. 런타임 의존성 2개. @modelcontextprotocol/sdk 와 zod 뿐이다.
HTTP 와 테스트 러너와 타입스크립트 실행은 전부 Node 내장을 쓴다.
Node.js 22.18 이상이 필요하다. 실행되는 것은 컴파일된 dist/index.js 지만, 개발과 검증이 .ts 를 직접 실행하고 그게 플래그 없이 도는 첫 버전이 22.18 이다. CI 는 22.18 과 24 와 26 에서 돌린다.
설치할 때 값 네 개를 묻는다. 하나도 안 넣어도 설치되고, 읽기 전용으로 동작한다.
토큰이 macOS 키체인에 들어간다. 설정 파일에 평문으로 남지 않는다 —
sensitive: true 로 선언한 값만 키체인으로 가고, 그건 테스트가 강제한다(P7).
값을 나중에 바꾸려면 /plugin manage.
npm 에 올려뒀으니 클론할 것 없이 MCP 클라이언트가 npx 로 띄운다. 설정 블록과
클라이언트 지원 범위는 설정 을 볼 것.
이 방식은 토큰이 클라이언트 설정 파일에 남는다. 위의 플러그인 방식은 키체인에 넣는다.
MCP 클라이언트 설정 파일(claude_desktop_config.json, .mcp.json 등)에 추가한다.
Claude Code CLI 라면:
로컬 체크아웃으로 돌리려면 command 를
node /절대경로/velog-mcp/dist/index.js 로 바꾼다.
어떤 클라이언트에서 되나? 이건 stdio 서버다 — 클라이언트가 로컬 프로세스로 띄운다. Claude Code·Claude Desktop·Cursor 처럼 MCP 서버를 로컬에서 실행하는 클라이언트에서 된다. claude.ai 와 ChatGPT 웹앱에서는 안 된다 — 둘 다 HTTP 로 접근 가능한 원격 MCP 서버만 받는다. 연결이 내 기계가 아니라 그쪽 서버에서 출발하기 때문이다. 웹에서 쓰려면 서버를 공개 호스팅하고 벨로그 토큰을 그 배포본에 넘겨야 하는데, 그러면 토큰을 내 기계에만 두려던 이유가 사라진다.
벨로그는 공개 쓰기 API 가 없어서 브라우저 세션 쿠키로 인증한다.
F12) → Application → Cookies → https://velog.iorefresh_token 값을 복사VELOG_REFRESH_TOKEN 하나만 넣으면 된다. 벨로그 서버가 수명 짧은
access_token 을 알아서 재발급하고(authPlugin.mts),
이 서버가 응답에 실려 오는 갱신 쿠키를 받아 쓴다. 한 번 넣으면 30일 간다.
VELOG_ACCESS_TOKEN 도 받지만 단독으로는 1시간이면 만료된다.
토큰은 환경변수로만 읽는다. 디스크에 쓰지 않고, 브라우저 쿠키 DB 나 OS 키체인을 건드리지 않는다. 다만 MCP 설정 파일에 적은 값은 그 파일에 평문으로 남는다 — 그 파일 관리는 사용자 몫이다.
토큰이 없어도 서버는 뜬다. 읽기 전용으로 동작하고, 공개 글 조회·검색·트렌딩· 블로그 통계는 인증 없이 된다.
두 스위치는 독립이다 — 하나만 켜도 되고 둘 다 켜도 된다.
'켬'으로 인정하는 값은 1, true, yes, on 뿐이다. 나머지는 전부 꺼짐 —
오타로 조용히 켜지지 않는다.
공개 발행이 꺼져 있으면 어떤 도구에도 is_private 파라미터가 존재하지 않는다.
모델이 공개를 요청할 방법 자체가 없다. 켜면 파라미터가 생기지만 기본값은 여전히
true(비공개)다.
몸사리는 게 아니라 실측 근거가 있다. 벨로그의 발행 제한은 is_private: false 인
글만 센다:
비공개 글은 이 계수를 올리지 않는다. 다만 isPostLimitReached() 는 공개 여부를
보기 전에 무조건 실행되므로, 이미 최근 5분에 공개 글이 10건 쌓여 있으면 비공개
초안 요청도 그 파괴 동작을 촉발할 수 있다 — '올리지 않는다'와 '유발하지 않는다'는
다르다. 그래서 쓰기 무재시도와 자체 상한을 함께 유지한다.
공개 글은 계수를 올리고, 한번 공개되면 RSS·검색 색인·구독 메일로 이미 나간 뒤라 지워도 회수가 안 된다. 명시적 opt-in 을 둘 만한 비대칭은 여기에 있다.
자세한 내용: docs/security.md
23개. 벨로그 상태를 바꾸는 건 그중 10개뿐이다.
velog_update_draft는 생략하면 초기화하고,velog_update_post는 유지한다. 의도한 비대칭이고 이유는 docs/tools.md 에 있다.
thumbnail 을 생략하면 본문 첫 이미지를 썸네일로 쓴다. 목록·공유 카드가 글자만
나오는 걸 막기 위해서다. 무엇을 넣었는지는 결과에 항상 표시하고, 후보가 여럿이면
나머지도 함께 보여준다.
코드블록·인라인코드 안의 이미지는 후보에서 제외한다(예제로 적어둔 마크다운이
썸네일이 되면 안 되므로). velog_update_post 는 기존 썸네일이 있으면 덮지 않는다 —
제목만 고쳤는데 목록 카드가 바뀌는 일이 없도록 한 것이고, 이때 null 은 "채우지 마라"이지
"지워라"가 아니다.
series_name 에 이름을 주면 저장 전에 내 시리즈에서 찾아 같은 요청에 실어 보낸다.
글쓰기와 시리즈 등록이 한 번의 호출로 끝난다. id 는 사람도 AI 도 모르기 때문에 이름을 받는다.
⚠️ 못 찾으면 글을 저장하지 않는다. 조용히 시리즈 없이 저장하면 들어간 줄 알기 때문이다. 이때 있는 시리즈 목록을 함께 알려준다.
series_name·series_id 를 둘 다 생략하면 저장 뒤 결과에 내 시리즈 목록을 붙여준다.
이 조회가 실패해도 글은 이미 저장된 뒤이므로 저장을 실패시키지 않는다(취소도 삼킨다 —
여기서 실패로 보고하면 재시도 때 글이 두 번 생긴다).
⚠️ 벨로그 API 로는 시리즈를 만들 수 없다. 뮤테이션에 시리즈 관련이 하나도 없고
WritePostInput도series_id만 받는다. 새 시리즈는 벨로그 웹에서 한 번 만들면 그 뒤부터 이 도구로 붙일 수 있다.
username 을 받는 도구 중 velog_list_drafts·velog_blog_stats·velog_export_posts
는 생략하면 내 계정을 쓴다. velog_search_posts 는 생략하면 벨로그 전체를 검색한다.
넘기는 건 무엇이 있고 무엇이 어디로 흐르는지뿐이다. 색·여백·글자 실측·모서리 라운딩·캔버스 크기는 렌더러가 쥔다. 매번 처음부터 그리면 매번 다르게 생기기 때문이다.
수치는 전부 실측이다. 노드 폭과 줄바꿈은 브라우저 getBBox() 로 잰다 — 글자수로
추정하면 한글·영문이 섞인 라벨에서 반드시 틀린다. 캔버스는 다 그린 뒤에 내용
bbox 로 정하므로 그림이 잘릴 수가 없다.
그리고 스스로 감사해서 여섯 가지를 보고한다:
감사에 하나라도 걸리면 올리지 않는다. 그리고 그걸 끄는 스위치는 없다.
벨로그에는 이미지 삭제 API 가 없고 업로드 한도도 깎이니, 어설픈 그림은 올리는 것보다
고쳐 그리는 게 낫다. 모델이 스스로 켤 수 있는 우회는 방어가 아니다 —
공개 발행 스위치와 같은 이유다(ADR 0004).
감사에 떨어진 PNG 는 이 서버로 올릴 길이 없다. upload:false 로 그려도 그 산출물은
거부 목록에 오르고, 경로를 velog_upload_image 에 줘도 막힌다 — 그 두 단계 우회를
막으려고 만든 장치다. 고쳐서 다시 그리는 것이 유일한 경로다.
(감사를 통과한 PNG 는 upload:false 로 그린 뒤 경로를 넘겨 올릴 수 있다.)
아이콘은 내장 28종(server·database·cloud·clock·alert …)이고 전부 도형
조합이다. 밖에서 받아오는 게 하나도 없다 — 렌더러는 DNS 를 막은 채로 돈다.
크롬이 필요하다 (크로미움 계열이면 된다: Edge·Brave·Chromium). macOS·리눅스·
윈도우에서 알아서 찾고, 다른 데 있으면 VELOG_CHROME_PATH 로 지정한다.
이 중 브라우저를 쓰는 건 velog_render_diagram, velog_render_sequence, velog_render_cover 셋뿐이고,
velog_upload_image 를 포함한 나머지 19개는 크롬 없이 동작한다.
비용은 실측해서 밝혀 둔다. 그림 한 장에 크롬 911개·최대 약 1GB 를 34초 쓰고
0 으로 돌아온다. 이건 크롬의 바닥이지 우리 그림 탓이 아니다.
좌표·글자·개수에는 전부 상한이 있고, 캔버스 상한(6000px/900만px)은 페이지 안에서
걸린다 — 브라우저는 크기를 받는 순간 표면을 준비하므로 바깥에서 막으면 늦다.
렌더는 줄을 세운다 — MCP 클라이언트가 도구를 병렬로 부르기 때문에, 안 그러면
그림 다섯 장 요청에 크롬 45개·6GB 가 된다. 줄을 세우면 동시 4회도 한 장 분량으로
고정된다. 10회 연속에서 누적이 없는 것도 확인했다.
VELOG_ALLOW_PROFILE=1도구 5개가 추가된다: velog_update_profile(이름·한줄소개), velog_update_about,
velog_update_blog_title, velog_update_social_links, velog_update_profile_image.
설정이 없으면 등록조차 되지 않는다.
게이트를 둔 건 위험해서가 아니다 — 전부 되돌릴 수 있고 본인 계정에만 영향이며
어디로도 배포되지 않는다. 이유는 혼동이다: 프로필의 short_bio 와 글의
short_description 은 이름이 비슷하다. "소개 좀 고쳐줘" 가 어느 쪽인지 모호할 때,
스위치가 꺼져 있으면 잘못 짚어도 프로필에 손이 닿지 않는다.
velog_update_profile 은 생략한 항목을 유지한다. 벨로그의 UpdateProfileInput
은 display_name 과 short_bio 를 둘 다 필수로 받아서 한쪽만 보내면 다른 쪽이
빈 문자열로 덮인다 — 그래서 현재 값을 읽어 채워 보낸다.
설정이 끝나면 MCP 클라이언트에 그냥 말하면 된다.
되돌릴 수 없는 도구에는 destructiveHint 가 붙어 있다. 다만 annotation 은
«힌트» 이지 차단이 아니다 — 호출 전에 승인을 물을지는 MCP 클라이언트 설정에 달렸다.
서버가 막는 것은 따로다: 공개 발행은 VELOG_ALLOW_PUBLIC=1 없이는 경로 자체가 없고,
쓰기는 재시도하지 않으며, 공개 발행은 이 서버 인스턴스 안에서 5분에 5건으로
스스로 제한한다(비공개 발행·초안에는 이 제한이 걸리지 않는다).
테스트 684건(0.9.6 기준). safety.test.ts 가 보안 불변식(A1A13)을,
R23, D1)과 시퀀스 불변식(S1render.test.ts 가 구성도 불변식(R1S12)을,
P28)을 고정한다.
깨지면 우회하지 말고 왜 깨졌는지부터 볼 것.plugin.test.ts 가 포장 불변식(P1
여기 있는 방어는 전부 일부러 망가뜨려 확인했다. 소스 변이 54종 + 발행 관문
자체를 겨눈 변이 12종(scripts/gate-mutation.sh), 각각이 검사를 정확히 1건씩
실패시켜야 한다. 방어를 지웠는데도 통과하는 테스트는 테스트가 아니다.
이 저장소에도 그런 게 여럿 있었고, 그렇게 해서 고쳤다.
벨로그 내부 GraphQL API 를 쓴다. 비공식이라 예고 없이 바뀔 수 있다.
뭔가 깨지면 npm run schema:dump 를 돌려 docs/api-reference.md 와 diff 하는 게
가장 빠르다.
벨로그 이용약관에는 자동화 접근을 제한하는 조항이 없다. 본인 토큰으로 본인 글을 다루는 것은 권한 내 행위이고, 게시물 저작권은 회원에게 귀속된다(제5조).
MIT
来源:README.md,提交 ed7ee01
벨로그 글 읽기
벨로그 글 하나를 본문까지 읽어온다. username + url_slug 조합이나 글 id 로 지정한다. 예: https://velog.io/@velopert/react-context-tutorial → username="velopert", url_slug="react-context-tutorial"
idurl_slugusername벨로그 글 목록
특정 사용자의 글 목록을 최신순으로 가져온다. tag 로 좁힐 수 있다. cursor 에 직전 응답의 마지막 글 id 를 주면 다음 페이지를 읽는다.
taglimitcursorusername必填벨로그 글 검색
키워드로 벨로그 전체를 검색한다. username 을 주면 그 사람 글 안에서만 찾는다 — "내가 예전에 쓴 그 글" 을 찾을 때 이 조합을 쓴다.
limitoffsetkeyword必填username벨로그 트렌딩
벨로그 전체에서 지금 많이 읽히는 글. 기간(day/week/month/year)을 골라 본다. 내 글이 아니라 벨로그 전체 순위다. 무엇이 반응을 얻는지, 어떤 주제가 도는지 볼 때 쓴다. 특정 사용자의 글은 velog_list_posts, 검색은 velog_search_posts 를 쓴다. year 기간은 벨로그가 limit>20 이면 빈 결과를 주므로 20 으로 낮추고, offset 도 1000 까지만 받는다. 조정하면 응답 notes 에 적어 준다. 인증 불필요.
limitoffsettimeframe벨로그 최신 글
벨로그 전체 최신 글. 지금 무슨 글이 올라오는지 훑을 때.
limitcursor벨로그 초안 작성
벨로그에 임시저장 글(초안)을 만든다. 발행되지 않으며 작성자 본인만 볼 수 있다. 이 도구는 어떤 설정에서도 발행하지 않는다 — 발행하려면 velog_publish_draft 를 따로 부를 것. body 는 마크다운으로 쓴다.
body必填tagstitle必填url_slugseries_idthumbnailseries_name벨로그 초안 수정
기존 초안을 **통째로 교체**한다. 부분 수정이 아니다. 생략한 필드는 유지되지 않고 초기화된다 — tags 를 안 주면 기존 태그가 전부 지워지고, url_slug 를 안 주면 제목에서 새로 만들어 주소가 바뀌며, series_id 를 안 주면 기존 시리즈 연결이 끊긴다. 그래서 수정 전에 velog_get_post 로 현재 값을 읽어 바꾸지 않을 필드도 그대로 다시 넘기는 것을 권한다. 발행된 글의 id 는 거부한다(비공개로 내려가는 사고 방지).
id必填body必填tagstitle必填url_slugseries_idthumbnailseries_name내 초안 목록
내 임시저장 글 목록. 초안을 이어 쓰거나 수정하기 전에 id 를 여기서 확인한다.
limitusername블로그 통계
한 사용자의 글 전체를 긁어 조회수·좋아요·댓글을 집계한다. 연도별·태그별 분포와 상위 글 순위를 함께 낸다. 벨로그에 없는 화면이라 직접 계산한다. 글이 많으면 여러 번 요청하므로 몇 초 걸릴 수 있다.
topusernamemax_pages글 마크다운 백업
한 사용자의 벨로그 글을 프론트매터가 붙은 마크다운 파일로 로컬에 저장한다. 벨로그에 공식 내보내기가 없어서 만든 기능이다. 파일 이름은 `슬러그--글id.md` 다 — 글마다 한 곳으로 정해지므로 같은 글을 다시 받으면 그 파일만 덮어쓴다. 글 본문을 한 편씩 받아오므로 글이 많으면 시간이 걸린다.
limitout_dir必填usernameskip_existing내 계정 확인
현재 토큰으로 인증된 계정을 확인한다. 토큰이 살아있는지 점검하는 용도로도 쓴다. 다른 도구에서 username 을 생략하면 여기서 얻는 계정을 쓴다.
无需输入参数。
벨로그 사용자 정보
벨로그 사용자의 프로필과 팔로워 수를 조회한다.
username必填시리즈 목록
사용자의 연재 시리즈 목록. 각 시리즈에 글이 몇 편인지 함께 준다. 초안을 특정 시리즈에 넣으려면 여기서 얻은 id 를 velog_create_draft 의 series_id 에 준다.
username必填사용자 태그 목록
사용자가 쓴 태그와 각 태그의 글 수. "이 사람이 뭘 주로 쓰나"를 가장 싸게 파악하는 방법이다.
topusername必填벨로그 글 발행
새 글을 바로 발행한다. 초안을 거치지 않는다. 현재 설정에서는 **비공개로만** 발행된다 (공개 발행은 VELOG_ALLOW_PUBLIC=1 이 필요하다). 되돌리려면 velog_unpublish_post 로 초안으로 내릴 수 있다.
body必填tagstitle必填url_slugseries_idthumbnailseries_name초안 발행
기존 임시저장 글을 발행한다. 본문은 저장된 내용을 그대로 쓴다 — 다시 넘길 필요가 없다. 현재 설정에서는 **비공개로만** 발행된다 (공개 발행은 VELOG_ALLOW_PUBLIC=1 이 필요하다).
id必填발행 취소 (초안으로 되돌리기)
발행된 글을 임시저장으로 되돌린다. 글은 사라지지 않고 초안 목록으로 간다. ★ 이미 나간 RSS·구독 메일은 회수되지 않는다 — 검색엔진 캐시도 한동안 남는다.
id必填발행글 수정
이미 발행된 글을 수정한다. 발행 상태(is_temp:false)는 유지된다. 생략한 필드는 **기존 값을 그대로 유지**한다 — 초안 도구와 달리 전체 교체가 아니다. 초안 id 는 거부한다(초안 수정은 velog_update_draft). 현재 설정에서는 공개 범위를 바꿀 수단이 없다 — 공개 글은 공개로, 비공개 글은 비공개로 그대로 남는다. 범위를 바꾸려면 VELOG_ALLOW_PUBLIC=1 이 필요하다.
id必填bodytagstitleurl_slugseries_idthumbnailseries_name다이어그램 그리기
구성도·흐름도를 그려 PNG 로 만들고 벨로그에 올린다. 본문에 붙일 마크다운을 돌려준다. 좌표만 주면 나머지는 렌더러가 맞춘다 — 노드 폭·캔버스 크기·선 꺾임·라벨 위치는 브라우저 실측으로 정해지고, 글자 삐져나옴/선 관통/선끼리 교차와 겹침/살짝 어긋난 줄은 자가감사가 잡는다. 감사에 걸리면 **올리지 않고** 무엇이 문제인지 알려준다. 이 판단은 끌 수 없고, 감사에 걸린 산출물은 velog_upload_image 로도 받지 않는다. 고쳐서 다시 그릴 것. **밋밋하게 나오면 입력이 밋밋한 것이다.** 사람 손 그림처럼 보이게 하는 셋: 노드마다 icon 과 tag(포트·버전·역할), 관련 노드는 groups 로 묶기, 흐름 종류가 둘 이상이면 planes 로 색 가르기. 나란한 노드는 y 를 맞추면 선이 곧게 나간다. **배치를 먼저 설계한다.** 카드는 격자(행 간격 200 안팎)에 두고, 옆으로 나란하면 y 를 같게, 어긋낼 거면 카드 높이 이상 어긋낸다. 한 면에는 나가는 선만 또는 들어오는 선만 둔다. 감사를 피하려고 points·label_at 을 쓰지 않는다(끝이 허공에 뜨거나 라벨이 선에서 떨어지면 감사가 잡는다). 걸리면 카드 자리를 고친다. 아이콘: alert arrow bell bolt branch browser cache chart check clock cloud code cross database file gear key layers lock mail mobile network package retry search server terminal user 톤: slate gray blue green amber yellow purple teal rose indigo
altedgesnodes必填title必填groupslegendplanesuploadpost_idsubtitle시퀀스 다이어그램 그리기
참가자와 순서 있는 메시지로 시퀀스 다이어그램을 그려 PNG 로 만들고 벨로그에 올린다. **좌표를 받지 않는다** — 열 간격, 행 높이, 활성 막대, 묶음 상자를 전부 렌더러가 실측으로 정한다. 라벨이 안 들어가면 글자를 줄이는 게 아니라 그 구간을 넓히고, 길면 접고, 접힌 만큼 행을 높인다. 메시지는 배열 순서가 곧 시간 순서다. 중간에 하나를 끼워 넣어도 아래가 알아서 밀린다. 구성도나 흐름도(시간 축이 없는 그림)는 velog_render_diagram 을 쓸 것. **깔끔하게 나오는 건 레이아웃이 아니라 입력이 정한다.** 세로 길이를 지배하는 셋: - `call` 에는 짝이 되는 `return` 을 붙인다. 안 닫힌 활성 막대는 계단처럼 겹쳐 쌓인다. - `note` 는 한 줄로 쓴다. 접힌 줄 수만큼 그 행이 통째로 높아진다. - 구분 기호(& ? = / , ; |)가 있는 긴 라벨은 렌더러가 그 뒤에서 끊는다. 그런 기호가 없는 긴 한글 토큰만 직접 끊어주면 된다. ⚠️ **자가감사 통과는 「보기 좋다」가 아니다.** 감사는 기하만 본다 — 삐져나옴, 겹침, 관통, 상자 범위. 쌓인 막대도 어색한 줄바꿈도 통과시킨다. 감사에 걸리면 **올리지 않고** 무엇이 문제인지 알려준다. 이 판단은 끌 수 없고, 감사에 걸린 산출물은 velog_upload_image 로도 받지 않는다. 종류: call async return note 아이콘: alert arrow bell bolt branch browser cache chart check clock cloud code cross database file gear key layers lock mail mobile network package retry search server terminal user 톤: slate gray blue green amber yellow purple teal rose indigo
alttitle必填legenduploadnumberspost_idmessages必填subtitlefragmentsactivationsparticipants必填글 표지 만들기
글 목록·SNS 미리보기에 쓸 표지 이미지(1200×630)를 만든다. 제목이 길면 줄바꿈하고, 그래도 안 들어가면 글자 크기를 줄인다 — 전부 실측 기준이다. 만든 뒤 velog_update_post 의 thumbnail 에 돌려받은 주소를 넣으면 표지가 된다.
tagstonetitle必填footerkickeruploadpost_idsubtitle이미지 올리기
로컬 이미지 파일을 벨로그에 올리고 본문용 마크다운을 돌려준다. PNG·JPEG·GIF·WebP 만 받으며, 확장자가 아니라 **파일 내용**으로 판정한다. ⚠️ 올라간 주소는 공개다 — 주소를 아는 사람은 누구나 볼 수 있고, 벨로그에는 이미지 삭제 API 가 없다. 올리기 전에 무슨 파일인지 확인하라.
altpath必填typepost_id벨로그 스키마 점검
지금 벨로그 GraphQL 스키마가 이 서버가 만들어질 때의 기준선과 같은지 대조한다. 도구가 이유 없이 실패하거나 응답 모양이 이상할 때 원인을 가르는 1차 진단이다. 벨로그는 비공식 API 라 예고 없이 바뀐다. 읽기 전용이고 인증이 필요 없다.
无需输入参数。
已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
/plugin marketplace add milcho0604/velog-mcp/plugin install velog@milchoclaude mcp add velog -e VELOG_REFRESH_TOKEN=여기에_토큰 \ -- npx -y @milcho0604/[email protected]git clone https://github.com/milcho0604/velog-mcp.gitcd velog-mcpnpm install && npm run build{ "mcpServers": { "velog": { "command": "npx", "args": ["-y", "@milcho0604/[email protected]"], "env": { "VELOG_REFRESH_TOKEN": "여기에 토큰" } } }}claude mcp add velog -e VELOG_REFRESH_TOKEN=여기에_토큰 \ -- npx -y @milcho0604/[email protected]"env": { "VELOG_REFRESH_TOKEN": "...", "VELOG_ALLOW_PUBLIC": "1", "VELOG_ALLOW_PROFILE": "1"}// apps/server/src/services/PostApiService/index.mtscount({ where: { fk_user_id, is_private: false, released_at: { gt: 5분전 } } })if (count >= 10) { updateMany({ where: { fk_user_id, released_at: { gt: 5분전 } }, data: { is_private: true } }) // 최근 글을 '전부' 비공개로}series_name: "PostgreSQL" ← 대소문자·앞뒤 공백은 무시하고 찾는다series_id: "e53810ca-..." ← id 를 알면 이쪽이 우선카드 밖으로 삐져나온 글자 · 억지로 맞추려 눌린 자간노드를 관통하거나 노드 뒤에 숨은 선 · 그룹 이름표를 가린 선선끼리 겹침 · 노드끼리 겹침 · 라벨이 카드나 그룹 이름표에 얹히거나 그룹 테두리에 걸침"오늘 고친 버그로 벨로그 초안 잡아줘" → 마크다운을 쓰고 초안으로 저장, 편집 URL 을 준다
"작년에 HTTP/2 로 뭐 썼더라" → 내 글 안에서 검색
"내 글 조회수 상위 10개랑 어떤 태그가 제일 많이 읽혔는지" → 블로그 전체를 훑어 집계
"내 글 전부 ~/blog-backup 에 백업해" → 프론트매터 붙은 .md 로 저장
"그 초안 발행해줘" → 기본은 비공개. 공개는 VELOG_ALLOW_PUBLIC=1 이 있어야 한다
"요청이 LB 에서 워커 거쳐 레디스까지 어떻게 흐르는지 그려줘" → 그림을 그리고 자가감사한 뒤 올리고, 본문에 붙일 마크다운을 준다
"이 글 표지 이미지 만들어줘" → 1200×630 카드. 주소를 velog_update_post 의 thumbnail 에 넣으면 표지가 된다---title: "글 제목"date: 2022-12-31T18:32:39.790Zslug: "url-slug"url: "https://velog.io/@username/url-slug"tags: ["태그1", "태그2"]likes: 260views: 16323---
마크다운 본문…npm test # node:test 로 .ts 직접 실행 — jest·ts-node 없음npm run typecheck # 테스트 포함 — 종전엔 제외돼 실제 오류가 숨어 있었다npm run lint # typescript-eslint (타입 기반)npm run build # tsconfig.build.json (dist 에 테스트 미포함)npm run schema:dump # 현재 벨로그 GraphQL 스키마 덤프npm run schema:baseline # schema/baseline.json 을 실측으로 다시 만든다 (velog_diagnose 의 기준선)npm run schema:baseline -- --check # 쓰지 않고 «지금 기준선이 맞는지» 만 본다