blogger-mcp
blogger-mcp
Google Blogger API v3 기반의 커스텀 MCP 서버. Claude Code / Claude Desktop 등 MCP 호스트에서 자신의 Blogger 블로그에 글을 조회/작성/수정/삭제할 수 있도록 도구(tools)를 제공합니다.
주요 기능 (MCP Tools)
도구 | 설명 |
| 인증된 사용자의 블로그 목록 |
| 블로그 URL → Blog ID 조회 |
| 블로그 글 목록 (status 필터 지원) |
| 특정 글 조회 |
| 새 글 작성 ( |
| 글 수정 (title/content/labels) |
| 글 영구 삭제 |
| 임시 저장 글 발행 |
| 발행된 글을 임시 저장으로 되돌림 |
Related MCP server: MCP-Google-Doc
아키텍처
Claude Code ──stdio──► blogger-mcp (Node)
│
├─ src/index.ts : MCP server (tools 등록/디스패치)
├─ src/auth.ts : OAuth 2.0 토큰 로드/저장/갱신
└─ src/auth-cli.ts : 최초 1회 대화형 인증용 CLI
│
▼
Google Blogger API v3인증: OAuth 2.0 (Desktop 앱). 최초 1회
npm run auth로 로컬 콜백 서버를 띄워 토큰을 받아~/.config/blogger-mcp/token.json에 저장. refresh token 으로 이후 자동 갱신됨.Scopes:
https://www.googleapis.com/auth/bloggerTransport: stdio (MCP host가 자식 프로세스로 기동)
빠른 시작
1. 설치 및 빌드
git clone https://github.com/mech12/blogger-mcp.git
cd blogger-mcp
npm install
npm run build2. OAuth 클라이언트 준비
Google Cloud Console에서 Blogger API v3을
활성화하고 Desktop 앱 타입의 OAuth 클라이언트를 발급받아
client_secret.json을 다운로드.
mkdir -p ~/.config/blogger-mcp
cp /path/to/client_secret.json ~/.config/blogger-mcp/client_secret.json자세한 Google Cloud 설정은 아래 Blogger API v3 인증 발급 참고.
3. 최초 인증
npm run auth브라우저로 표시되는 URL을 열고 동의하면 ~/.config/blogger-mcp/token.json이
생성됩니다.
4. Claude Code에 등록
claude mcp add blogger --scope user -- node /absolute/path/to/blogger-mcp/dist/index.js또는 ~/.claude.json에 직접:
{
"mcpServers": {
"blogger": {
"command": "node",
"args": ["/absolute/path/to/blogger-mcp/dist/index.js"]
}
}
}환경변수
변수 | 기본값 | 설명 |
|
| 자격 증명 디렉터리 |
|
| OAuth 클라이언트 JSON 경로 |
Blogger API v3 인증 발급 (요약)
Google Cloud 프로젝트 생성 — https://console.cloud.google.com/
API 라이브러리에서
Blogger API v3사용 설정OAuth 동의 화면 구성
User Type: 외부(External)
Scope 추가:
https://www.googleapis.com/auth/blogger테스트 사용자에 본인 Google 계정 추가
사용자 인증 정보 → OAuth 클라이언트 ID
애플리케이션 유형: 데스크톱 앱
생성 후 JSON 다운로드 →
~/.config/blogger-mcp/client_secret.json
Blog ID 확인
Blogger 관리자 URL의
blogID=...숫자 또는get_blog_by_url도구로 조회
프로젝트에 특화된 상세 가이드는 호스트 프로젝트의
docs/vibe/mcp/blogger-mcp.md에서 관리합니다.
구현 계획 (Design Notes)
스택: TypeScript + Node 18+,
@modelcontextprotocol/sdk,googleapis,google-auth-library.토큰 저장 위치:
~/.config/blogger-mcp/..gitignore로 보호.에러 전략: tool 호출 실패는 MCP가 자동으로 에러 래핑. 인증 누락 시
No stored token. Run \npm run auth` first.` 메시지로 가이드.확장 로드맵:
Markdown → HTML 변환 도구 (
marked기반)이미지 업로드(Blogger는 Picasa/Google Photos 우회 필요 → 차후 옵션)
글 스케줄 발행 (
published필드 세팅)
개발
npm run dev # tsc --watch
npm run build # dist/ 생성
npm start # dist/index.js 실행 (MCP stdio 서버)
npm run auth # OAuth 최초 인증라이선스
MIT
Available Tools
9 toolscreate_postC
Create a new blog post. Content is HTML; labels is a list of tags. isDraft=true saves as draft.
| Name | Required | Description | Default |
|---|---|---|---|
| blogId | Yes | ||
| title | Yes | ||
| content | Yes | HTML body | |
| labels | No | Tags/labels | |
| isDraft | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that 'isDraft=true saves as draft', which implies a mutation with a draft state, but fails to cover critical aspects like required permissions, whether creation is irreversible, rate limits, or what happens on success/failure. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences that directly convey the tool's purpose and key parameter details. Every word serves a purpose, with no redundant information, making it front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a mutation tool with 5 parameters, no annotations, and no output schema, the description is incomplete. It lacks information on behavioral traits, error handling, return values, and usage context, which are essential for safe and effective tool invocation in this scenario.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 40%, and the description adds some value by clarifying that 'Content is HTML' and 'labels is a list of tags', which helps interpret parameters beyond the schema. However, it doesn't fully compensate for the low coverage, as parameters like 'blogId' and 'title' remain without additional context, and no details on formats or constraints are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new blog post') and specifies the resource ('blog post'), which provides a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'update_post' or 'publish_post' beyond mentioning the draft functionality, which slightly limits its distinctiveness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'update_post' or 'publish_post', nor does it mention prerequisites such as needing an existing blog or permissions. It only hints at usage by noting the draft option, but lacks explicit when/when-not instructions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_postC
Delete a post permanently
| Name | Required | Description | Default |
|---|---|---|---|
| blogId | Yes | ||
| postId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses permanence ('permanently'), which is a key behavioral trait beyond basic deletion. However, it lacks details on permissions needed, side effects (e.g., comments deletion), error handling, or confirmation steps. For a destructive tool, this is a significant gap in safety and operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero waste. It directly states the tool's purpose without unnecessary words. Every part ('Delete a post permanently') earns its place by conveying essential information efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's destructive nature, complexity is moderate, but with no annotations and no output schema, the description is incomplete. It doesn't cover return values, error cases, or important behavioral nuances. For a permanent deletion tool among siblings like revert_post, more context on implications and usage is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It doesn't add any meaning beyond the schema—no explanation of what blogId/postId represent, their format, or how to obtain them. The baseline is 3 because the schema defines two required parameters clearly, but the description fails to enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and resource ('a post'), specifying it's permanent. It distinguishes from siblings like revert_post (which might undo) and update_post (which modifies), but doesn't explicitly name alternatives. The purpose is specific but could better differentiate from other destructive operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternatives is provided. The description doesn't mention prerequisites (e.g., needing postId/blogId), exclusions (e.g., not for drafts vs. published posts), or when to choose delete over revert_post. Usage is implied by the name but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blog_by_urlC
Resolve a Blog ID from a blog URL (e.g. https://xxx.blogspot.com)
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool resolves a Blog ID from a URL, implying a read-only lookup operation, but doesn't describe error handling (e.g., for invalid URLs), performance characteristics, authentication needs, or what happens if the blog doesn't exist. For a tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Resolve a Blog ID from a blog URL') and includes a helpful example. There is zero waste—every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no output schema) and lack of annotations, the description is incomplete. It doesn't explain what the resolved Blog ID is used for, how it's returned, or potential errors. For a lookup tool in a blog management context, more context about the ID's purpose or integration with other tools would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 1 parameter with 0% description coverage, so the description must compensate. It adds meaning by specifying that the 'url' parameter should be a blog URL (e.g., 'https://xxx.blogspot.com'), which clarifies the expected format beyond the schema's generic string type. However, it doesn't detail constraints like URL validation rules or supported domains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Resolve a Blog ID from a blog URL'. It specifies the verb ('resolve') and resource ('Blog ID'), and provides an example URL format. However, it doesn't explicitly differentiate from sibling tools like 'list_blogs' or 'get_post', which could also involve blog identification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, when-not-to-use scenarios, or compare it to siblings like 'list_blogs' (which might list blogs without URL resolution) or 'get_post' (which might retrieve posts rather than blog metadata).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postC
Fetch a single post
| Name | Required | Description | Default |
|---|---|---|---|
| blogId | Yes | ||
| postId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Fetch' implies a read-only operation, but it doesn't specify whether authentication is required, if there are rate limits, what happens on invalid IDs, or the return format. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at three words, with zero wasted language. It's front-loaded with the core action ('Fetch a single post'), making it easy to scan. Every word earns its place by conveying essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a read operation with two required parameters), lack of annotations, 0% schema coverage, and no output schema, the description is incomplete. It doesn't explain parameter meanings, behavioral traits like error handling, or what the tool returns. For a tool in this context, more detail is needed to be fully actionable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the two required parameters (blogId, postId) are undocumented in the schema. The description adds no information about these parameters—it doesn't explain what they represent, their format, or how to obtain them. This fails to compensate for the lack of schema documentation, leaving parameters semantically unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Fetch a single post' clearly states the verb ('fetch') and resource ('post'), making the purpose immediately understandable. It distinguishes this from siblings like 'list_posts' (multiple posts) and 'create_post' (write operation). However, it doesn't specify what 'fetch' entails (e.g., retrieving by ID), which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a blogId and postId), differentiate from 'list_posts' for multiple posts, or explain when to use 'get_blog_by_url' instead. Without such context, the agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_blogsB
List blogs owned by the authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool lists blogs, implying a read-only operation, but doesn't cover critical aspects like pagination, sorting, error handling, or authentication requirements beyond the user context. This leaves significant gaps for a tool that likely returns multiple items.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function without any wasted words. It's appropriately sized for a simple list operation and front-loads the key information, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema), the description is minimal but adequate for basic understanding. However, it lacks completeness for practical use: no output format details, no error handling, and no differentiation from siblings. With no annotations to fill these gaps, the description should provide more context for reliable agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% description coverage, so the schema fully documents the absence of parameters. The description doesn't need to add parameter details, but it implicitly clarifies that no filtering parameters are available (e.g., it lists all blogs for the user). This slight added context justifies a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('blogs owned by the authenticated user'), making the purpose unambiguous. However, it doesn't explicitly distinguish this tool from sibling tools like 'list_posts' or 'get_blog_by_url', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'list_posts' or 'get_blog_by_url'. It mentions the scope ('owned by the authenticated user'), but lacks explicit when-to-use or when-not-to-use instructions, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_postsC
List posts of a blog
| Name | Required | Description | Default |
|---|---|---|---|
| blogId | Yes | ||
| maxResults | No | ||
| status | No | Filter by status (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'List posts of a blog' implies a read operation but does not specify whether it requires authentication, has rate limits, returns paginated results, or handles errors. For a tool with three parameters and no annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It is front-loaded and directly states the tool's purpose without unnecessary elaboration, making it easy to parse quickly. This meets the criteria for high conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (three parameters, no annotations, no output schema), the description is incomplete. It lacks details on behavioral traits, parameter usage, and output expectations. For a list operation that likely returns multiple items, more context is needed to guide effective use, making this inadequate for the tool's requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention any parameters, leaving all semantic details to the input schema. With schema description coverage at 33% (only 'status' has a description), the parameters 'blogId' and 'maxResults' are undocumented. The description adds no value beyond the schema, but since the schema provides some coverage, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List posts of a blog' clearly states the verb ('list') and resource ('posts of a blog'), making the tool's purpose understandable. However, it does not distinguish this tool from potential siblings like 'list_blogs' or 'get_post', which could cause confusion in selection. The specificity is adequate but lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'list_blogs', 'get_post', and 'get_blog_by_url', there is no indication of context, prerequisites, or exclusions. This absence of usage instructions may lead to incorrect tool selection by an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_postC
Publish a draft post
| Name | Required | Description | Default |
|---|---|---|---|
| blogId | Yes | ||
| postId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Publish a draft post' implies a mutation operation (changing post status from draft to published) but doesn't specify whether this is reversible, what permissions are required, whether it triggers notifications, or what happens on failure. For a mutation tool with zero annotation coverage, this leaves significant behavioral questions unanswered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is maximally concise at just three words, front-loading the essential action and resource. Every word earns its place: 'Publish' specifies the action, 'draft post' specifies the target resource and its required state. There is zero wasted verbiage or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 2 required parameters, 0% schema description coverage, no annotations, and no output schema, the description is inadequate. It doesn't explain what happens after publishing (success/failure states), what the parameters mean, or any behavioral implications. The agent would need to guess about parameter semantics and post-publishing effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning neither blogId nor postId parameters have descriptions in the schema. The tool description provides absolutely no information about these parameters - not what they represent, where to find them, what format they should be in, or how they relate to each other. The description fails to compensate for the complete lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Publish a draft post' clearly states the action (publish) and the resource (draft post), making the tool's purpose immediately understandable. It distinguishes from siblings like create_post, update_post, and delete_post by focusing specifically on transitioning a draft to published state. However, it doesn't explicitly differentiate from revert_post which might also involve post status changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., that a draft post must exist), when not to use it (e.g., for already published posts), or how it differs from similar tools like update_post which might also affect post status. The agent must infer usage context from the tool name and sibling relationships alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revert_postC
Revert a published post back to draft
| Name | Required | Description | Default |
|---|---|---|---|
| blogId | Yes | ||
| postId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action without behavioral details. It lacks information on permissions required, whether the revert is reversible, side effects (e.g., notifications, version history), or error conditions (e.g., if post is already a draft). This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It is front-loaded with the core action and outcome, making it easy to parse quickly. Every word earns its place by conveying essential purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 2 parameters, 0% schema coverage, no annotations, and no output schema, the description is incomplete. It covers the basic purpose but lacks usage guidelines, parameter details, behavioral context, and output expectations, leaving significant gaps for agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but adds no parameter information. It does not explain what 'blogId' and 'postId' represent, their format, or how to obtain them (e.g., from 'list_posts'). This leaves both parameters undocumented, failing to bridge the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('revert') and target resource ('a published post'), specifying the outcome ('back to draft'). It distinguishes from siblings like 'delete_post' (removal) and 'update_post' (modification), but could be more explicit about how it differs from 'create_post' or 'publish_post' in terms of state change.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage on published posts only, but provides no explicit guidance on when to use this tool versus alternatives like 'update_post' for editing content or 'delete_post' for removal. No prerequisites (e.g., post must be published) or exclusions are stated, leaving gaps for agent decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_postC
Update an existing post (title/content/labels).
| Name | Required | Description | Default |
|---|---|---|---|
| blogId | Yes | ||
| postId | Yes | ||
| title | No | ||
| content | No | ||
| labels | No |
TDQS
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 states this is an update operation, implying mutation, but doesn't disclose behavioral traits such as required permissions, whether changes are reversible, rate limits, error handling, or what happens to unspecified fields. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action. It wastes no words but could benefit from slightly more detail given the lack of annotations and schema descriptions. Overall, it's appropriately sized for its content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (mutation tool with 5 parameters, 0% schema coverage, no annotations, no output schema), the description is incomplete. It doesn't explain return values, error cases, or provide enough context for safe and effective use. It should do more to compensate for the missing structured data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions parameters ('title/content/labels') but doesn't explain their semantics, formats, or constraints. It omits blogId and postId entirely, which are required parameters. The description adds minimal value beyond the schema, failing to address the coverage gap adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Update') and resource ('an existing post'), and specifies what can be updated ('title/content/labels'). It distinguishes from siblings like create_post, delete_post, and get_post by focusing on modification rather than creation, deletion, or retrieval. However, it doesn't explicitly differentiate from revert_post (which might also modify a post).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing blogId and postId), when not to use it (e.g., for new posts vs. existing ones), or direct alternatives like revert_post for undoing changes. Usage is implied by the action but not explicitly contextualized.
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.
9 tool updates
v0.1.0- First observed
create_post - First observed
delete_post - First observed
get_blog_by_url - First observed
get_post - First observed
list_blogs - First observed
list_posts - First observed
publish_post - First observed
revert_post - First observed
update_post
TDQS
Scored across 9 tools
Every tool has a clearly distinct purpose with no ambiguity. Each tool targets a specific resource (blog, post) and action (create, delete, get, list, publish, revert, update), making it easy for an agent to select the correct one. The separation between operations like publish_post and revert_post is particularly clear.
All tool names follow a consistent verb_noun pattern with snake_case throughout, such as create_post, delete_post, and list_blogs. There are no deviations in naming conventions, making the set predictable and readable for an agent.
With 9 tools, this server is well-scoped for managing blogs and posts, covering essential operations without bloat. Each tool earns its place by addressing a specific need in the blogging workflow, from listing blogs to handling post lifecycles.
The tool surface provides complete CRUD/lifecycle coverage for the blogging domain. It includes create, read (get/list), update, and delete for posts, plus additional lifecycle actions like publish and revert, with no obvious gaps that would cause agent failures.
Maintenance
Related MCP Connectors
An MCP server for the BlogCaster project.
Create, edit, organize, publish, and configure JustBlogged blogs from MCP clients.
Hosted MCP for BlogBat: read, write, generate, and publish blog articles and content.
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for managing Ghost blogs from AI coding editors. Create, edit, publish, and sync blog posts directly from tools like Claude Code or Cursor.151MIT
- AlicenseNot gradedqualityFmaintenanceMCP server that allows you to connect to Google Docs through Claude, enabling listing, reading, creating, updating, searching, and deleting documents.88148MIT
- FlicenseDqualityDmaintenanceMCP server for blog management that provides tools to get, search, and create blog posts via a mock API.3-
- AlicenseNot gradedqualityCmaintenanceMCP server for managing Blogger posts: create, update, retrieve posts, and upload images to GCS via natural language.2MIT