Skip to main content
Glama
pockta11
by pockta11

velog-mcp

Claude Code(또는 다른 MCP 클라이언트)에서 벨로그(velog.io)에 직접 글을 발행할 수 있게 해주는 개인용 MCP 서버입니다.

중요: 벨로그는 공식 글쓰기 API를 제공하지 않습니다. 이 프로젝트는 velog.io 프론트엔드가 내부적으로 쓰는 비공식 GraphQL 엔드포인트(v3.velog.io/graphql)를 사용합니다. 벨로그 측이 이 스키마를 언제든 바꾸거나 접근을 막을 수 있으므로, 실패 시 Playwright로 실제 브라우저를 띄워 에디터를 조작하는 방식으로 자동 폴백하도록 만들었습니다.

동작 방식

  1. velog_login 도구로 최초 1회 브라우저 로그인 (이후 세션은 프로필에 저장되어 재사용됨)

  2. velog_create_post 호출 시 저장된 프로필에서 현재 세션 쿠키를 읽어와 GraphQL writePost 뮤테이션으로 시도 (페이지를 한 번 로드해서 velog 자체 토큰 갱신 로직이 동작할 기회를 줌)

  3. 그래도 실패하면(스키마 변경, 세션 만료 등) Playwright로 velog.io/write 페이지를 직접 조작해 발행 (같은 로그인 프로필 재사용)

Related MCP server: cnblogs-mcp

설치

```bash npm install npx playwright install chromium npm run build ```

계정/세션 설정 (가장 중요한 단계)

토큰을 수동으로 복사할 필요 없습니다. Claude Code에서 velog_login 도구를 호출하면:

  1. 브라우저 창이 뜸

  2. 평소처럼 velog에 로그인 (아이디/비번, 소셜 로그인 다 가능)

  3. 로그인 인식되면 창이 자동으로 닫히고 세션이 저장됨

오늘 벨로그 main 계정으로 로그인해줘

세션은 프로젝트 폴더가 아니라 홈 디렉토리에 저장됩니다:

  • ~/.velog-mcp/accounts.json — 별칭 ↔ username 매핑 (파일 권한 600)

  • ~/.velog-mcp/profiles/<별칭>/ — 실제 로그인 쿠키가 담긴 Chromium 프로필

여러 벨로그 계정을 쓴다면 velog_login을 다른 account 별칭으로 여러 번 실행하면 됩니다. 도구 호출 시 account 파라미터로 별칭을 지정합니다.

⚠️ 보안 주의

  • ~/.velog-mcp/profiles/<별칭>/은 로그인 쿠키를 담고 있어 사실상 비밀번호와 동일합니다. 절대 git에 커밋하거나 다른 사람과 공유/백업하지 마세요.

  • ~/.velog-mcp/.gitignore에도 걸려있지만, 애초에 프로젝트 폴더 밖에 두는 것이 안전합니다.

  • 세션이 이상하면 벨로그에서 로그아웃 후 velog_login을 다시 실행해서 프로필을 새로 만드세요.

  • 세션 완전히 폐기하려면 해당 ~/.velog-mcp/profiles/<별칭>/ 폴더를 직접 삭제하면 됩니다.

Claude Code에 등록하기

Claude Code의 MCP 설정 파일(~/.claude/mcp_servers.json 또는 프로젝트별 설정)에 추가:

```json { "mcpServers": { "velog": { "command": "node", "args": ["/절대/경로/velog-mcp/dist/index.js"] } } } ```

등록 후 Claude Code에서 예:

오늘 작업한 내용 정리해서 velog 계정 main으로 "이번 주 SM 작업 정리"라는 제목으로 발행해줘

제공 도구

도구

설명

velog_login

브라우저로 로그인, 세션 저장/갱신

velog_list_accounts

등록된 계정 별칭 조회

velog_create_post

새 글 작성 (GraphQL → 실패 시 Playwright 폴백)

velog_edit_post

기존 글 수정 (GraphQL 전용)

velog_list_posts

최근 글 목록 조회

알려진 한계

  • 세션 쿠키를 읽어올 때마다 헤드리스 브라우저로 velog.io를 한 번 로드합니다(약 1~3초 오버헤드). 글 하나 쓸 때 크게 문제되는 수준은 아닙니다.

  • Playwright 폴백의 CSS 셀렉터(textarea[placeholder*="제목"] 등)는 velog 에디터 UI가 바뀌면 깨질 수 있습니다. 문제가 생기면 playwrightFallback.tschromium.launchPersistentContext(..., { headless: false })로 바꿔서 직접 화면을 보며 셀렉터를 갱신하세요.

  • 로그인 세션(~/.velog-mcp/profiles/<별칭>/)이 완전히 만료되면 velog_login을 다시 실행해야 합니다. velog 쪽 세션 유효 기간에 따라 달라져 정확한 주기는 알 수 없습니다.

  • 이 방식은 velog의 이용약관 범위를 벗어나지 않는 "본인 계정으로 본인 글 발행 자동화"에 한정해서 쓰는 것을 전제로 합니다.

Available Tools

5 tools
velog_create_postB

벨로그에 새 글을 작성합니다. GraphQL로 먼저 시도하고, 인증 오류나 API 실패 시 Playwright 브라우저 자동화로 자동 폴백합니다.

[글쓰기 스타일 가이드 - 벨로그 인기글 공통 패턴]

  • 제목: 대조형/질문형 훅 ("~인 줄 알았는데", "~해야 할까?", "~에 반대한다")

  • 도입부: > 인용구로 문제/질문 던지며 시작하거나 "안녕하세요 ~하고 있는 ~입니다" 식 개인 소개

  • 본문 상단에 "한 줄 요약" 또는 "들어가며" 섹션으로 전체 요지 먼저 제시

  • 소제목으로 섹션 구분, 섹션 사이 --- 구분선

  • 짧은 문단 위주, 핵심 문장은 굵게 강조, 나열은 리스트로

  • 1인칭 서술체 ("나는 ~라고 생각한다", "~해봤다") - 설명문보다 경험담 톤

  • 마무리는 요약 반복 대신 회고/전망 한 줄로 끝맺기

  • 개념 설명/구조 설명 구간엔 텍스트 대신 아이콘형 인포그래픽이나 박스+화살표 다이어그램 이미지를 직접 만들어 넣는다 (mermaid 코드블럭 아님 - 실제 PNG). HTML/SVG를 짜서 브라우저로 스크린샷 찍고, velog 에디터의 이미지 업로드로 velcdn에 올린 뒤 그 URL을 로 삽입한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes마크다운 본문
tagsNo
titleYes
accountYesvelog_login으로 등록한 계정 별칭
publishNotrue면 즉시 발행, false면 임시저장(초안)

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden. It does disclose a meaningful behavioral trait: trying GraphQL first and falling back to Playwright on auth/API errors, plus the image pipeline (HTML/SVG → screenshot → velcdn upload → ![](...) embed). However, it omits end-state behavior when both paths fail, side effects, and account/auth requirements beyond a schema reference.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core behavior is front-loaded in one clear sentence, but the writing style guide is a large 7-bullet block of content-quality guidance that is only tangentially needed for invoking the tool. It is organized with a header and bullets, but much of it is verbose secondary material rather than scannable invocation-critical information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex tool (5 parameters, dual execution paths, image generation) with no output schema and no annotations. The description never states what the tool returns on success (post URL? ID?), what happens if both GraphQL and Playwright fail, or whether drafts are recoverable. The style guide is thorough on content but thin on the operational contract an agent needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60%, and the writing style guide substantially compensates for the gap: it specifies body structure (## subheadings, --- dividers, bold emphasis, lists, short paragraphs), tone (first-person, experience-based), and title hook patterns. This adds rich meaning beyond the schema's bare '마크다운 본문' field. tags and publish gain little from the description, but publish is already well documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence '벨로그에 새 글을 작성합니다' states a specific verb (create) and resource (Velog post). The word '새 글' (new post) implicitly distinguishes this from the sibling velog_edit_post, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus velog_edit_post, velog_login, or velog_list_posts. There are no usage conditions, prerequisites, or exclusions. The only usage-adjacent text describes the internal fallback mechanism (GraphQL → Playwright), which is behavioral, not selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

velog_edit_postC

기존 벨로그 글을 수정합니다 (GraphQL 전용, 폴백 없음).

[글쓰기 스타일 가이드 - 벨로그 인기글 공통 패턴]

  • 제목: 대조형/질문형 훅 ("~인 줄 알았는데", "~해야 할까?", "~에 반대한다")

  • 도입부: > 인용구로 문제/질문 던지며 시작하거나 "안녕하세요 ~하고 있는 ~입니다" 식 개인 소개

  • 본문 상단에 "한 줄 요약" 또는 "들어가며" 섹션으로 전체 요지 먼저 제시

  • 소제목으로 섹션 구분, 섹션 사이 --- 구분선

  • 짧은 문단 위주, 핵심 문장은 굵게 강조, 나열은 리스트로

  • 1인칭 서술체 ("나는 ~라고 생각한다", "~해봤다") - 설명문보다 경험담 톤

  • 마무리는 요약 반복 대신 회고/전망 한 줄로 끝맺기

  • 개념 설명/구조 설명 구간엔 텍스트 대신 아이콘형 인포그래픽이나 박스+화살표 다이어그램 이미지를 직접 만들어 넣는다 (mermaid 코드블럭 아님 - 실제 PNG). HTML/SVG를 짜서 브라우저로 스크린샷 찍고, velog 에디터의 이미지 업로드로 velcdn에 올린 뒤 그 URL을 로 삽입한다.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyNo
tagsNo
titleNo
accountYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description must disclose side effects, but it only notes 'GraphQL 전용, 폴백 없음' (GraphQL-only, no fallback). It does not mention that the operation mutates the post, requires authentication/ownership, or how existing fields are replaced or merged.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence is efficient, but it is followed by a large, unrelated 'writing style guide' block that dominates the description. Most of that content does not help an agent invoke the tool and should be moved elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with five parameters, no annotations, no schema descriptions, and no output schema, the definition is incomplete. It omits authentication/account requirements, partial-update behavior, error conditions, and return information; the style guide does not fill these gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description fails to explain any of the five parameters, including required 'id' and 'account', or the optional 'body', 'tags', and 'title'. The style guide discusses writing style but not parameter meaning, format, or relation to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states the operation clearly: '기존 벨로그 글을 수정합니다' (edits an existing Velog post), with a specific verb and resource. The word '기존' (existing) distinguishes it from creation, but it does not explicitly contrast it with sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus velog_create_post, velog_list_posts, or velog_list_accounts. The only contextual clue is that it edits an existing post, and the long style guide is about content writing, not tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

velog_list_accountsA

등록된 벨로그 계정 별칭 목록을 반환합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral disclosure burden. It only says the tool returns a list and does not disclose whether this is a read-only local operation, whether prior login is required, or what the exact return shape is. For a simple list tool the risk is low, but the description adds no behavioral context beyond the action itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, tightly written sentence in Korean that front-loads the resource ('등록된 벨로그 계정 별칭 목록') and the action ('반환합니다'). Every word earns its place, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless list tool, the description is minimally adequate: it states what is returned and no input is needed. However, there is no output schema to define the response structure, and the description does not clarify whether the list is in-memory, persisted locally, or requires an active session. This leaves a small but real gap for an agent deciding if the tool is applicable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. There is nothing for the description to add about parameter meaning or syntax, and no schema gap to compensate for.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('반환합니다' / returns) and a specific resource ('등록된 벨로그 계정 별칭 목록' / list of registered Velog account aliases). This clearly distinguishes it from siblings like velog_list_posts (which lists posts) and velog_login (which authenticates).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is used to see registered account aliases, likely before other Velog operations, but it does not explicitly state when to use it or mention alternatives. No exclusions or routing guidance is provided, leaving the context to be inferred from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

velog_list_postsB

해당 계정이 쓴 최근 글 목록을 조회합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
accountYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It implies a read-only operation and recency ordering, but does not disclose authentication needs, pagination behavior, error handling, or any side effects. The basic read nature is clear, but little else is.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that conveys the core purpose with no filler or redundancy. It is appropriately short and front-loaded, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, no annotations, and minimal parameter documentation, the tool description is not complete enough for an agent to invoke it confidently. Missing details include the response shape, whether authentication is required, and how the 'limit' parameter behaves.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, so the description must compensate. It indirectly clarifies that 'account' is the author of the posts, but it says nothing about 'limit' or its default behavior. This leaves one of the two parameters effectively undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('조회합니다' = retrieves) and resource ('해당 계정이 쓴 최근 글 목록' = recent posts written by that account). This clearly distinguishes it from the sibling tools like velog_list_accounts, velog_create_post, and velog_login.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only states what the tool does. There is no guidance about when to use it versus alternatives, whether prior login via velog_login is required, or how to obtain the account name. An agent gets no context for choosing this tool over other operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

velog_loginA

브라우저 창을 띄워 velog 로그인을 진행합니다. 최초 1회 또는 세션 만료 시 실행하세요. 로그인 완료되면 세션이 프로필로 저장되어 이후 토큰을 수동으로 넣을 필요가 없습니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountYes이 로그인 세션에 붙일 별칭 (예: main)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that a browser window is opened, the session is saved as a profile, and manual token insertion is avoided. However, it does not mention interaction expectations, potential for existing session overwrite, or what the call returns when completed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences each add distinct value: what, when, and outcome. No filler words, and the most important action appears first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter login tool with no annotations or output schema, the description covers the essential context: why, when, and the persistent effect. It could mention what the tool returns or how the agent confirms login success, but the side effect of saving a profile is stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter 'account' is already documented in the schema with an alias example, and schema coverage is 100%. The description doesn't add additional meaning about the parameter, but also doesn't need to because the schema does the job.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: opens a browser window to proceed with velog login. This clearly distinguishes from sibling tools like velog_create_post or velog_list_posts, which handle content operations. The action is not a tautology of the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to run: on initial use or when session expires. It doesn't name alternatives or exclusion conditions, but the context is enough for an agent to decide. Sibling tools are for other purposes, so no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedvelog_create_post
    • First observedvelog_edit_post
    • First observedvelog_list_accounts
    • First observedvelog_list_posts
    • First observedvelog_login

TDQS

B3.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct action: listing accounts, logging in, creating posts, editing posts, and listing posts. There is no meaningful overlap or ambiguity between the tools.

Naming Consistency4/5

All tools share the velog_ prefix and follow lower_snake_case naming with clear verb-first patterns. 'velog_login' is a minor deviation since it is a single verb with no noun object, but it remains predictable and natural.

Tool Count5/5

Five tools is a well-scoped set for a Velog-focused MCP server. Each tool supports a necessary step in the account and post management workflow without unnecessary bloat.

Completeness4/5

The core publishing workflow is covered: login, create, edit, and list posts. Missing operations like deleting a post or fetching an individual post are minor gaps that agents can work around for typical publishing use cases.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers