Skip to main content
Glama

blogger-mcp

A custom MCP server based on the Google Blogger API v3. It provides tools for MCP hosts like Claude Code / Claude Desktop to list, create, edit, and delete posts on your Blogger blog.

Key Features (MCP Tools)

Tool

Description

list_blogs

List blogs for the authenticated user

get_blog_by_url

Blog URL → Blog ID lookup

list_posts

List blog posts (supports status filter)

get_post

Retrieve a specific post

create_post

Create a new post (save as draft with isDraft=true)

update_post

Update a post (title/content/labels)

delete_post

Permanently delete a post

publish_post

Publish a draft post

revert_post

Revert a published post to draft status

Related MCP server: MCP-Google-Doc

Architecture

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
  • Authentication: OAuth 2.0 (Desktop app). Run npm run auth once to launch a local callback server, receive the token, and save it to ~/.config/blogger-mcp/token.json. It is automatically refreshed using a refresh token thereafter.

  • Scopes: https://www.googleapis.com/auth/blogger

  • Transport: stdio (MCP host launches as a child process)

Quick Start

1. Installation and Build

git clone https://github.com/mech12/blogger-mcp.git
cd blogger-mcp
npm install
npm run build

2. Prepare OAuth Client

Enable Blogger API v3 in the Google Cloud Console, create a Desktop app type OAuth client, and download client_secret.json.

mkdir -p ~/.config/blogger-mcp
cp /path/to/client_secret.json ~/.config/blogger-mcp/client_secret.json

For detailed Google Cloud configuration, refer to Blogger API v3 Authentication Issuance below.

3. Initial Authentication

npm run auth

Open the URL displayed in your browser and grant permission to generate ~/.config/blogger-mcp/token.json.

4. Register with Claude Code

claude mcp add blogger --scope user -- node /absolute/path/to/blogger-mcp/dist/index.js

Or directly in ~/.claude.json:

{
  "mcpServers": {
    "blogger": {
      "command": "node",
      "args": ["/absolute/path/to/blogger-mcp/dist/index.js"]
    }
  }
}

Environment Variables

Variable

Default

Description

BLOGGER_MCP_CRED_DIR

~/.config/blogger-mcp

Credentials directory

BLOGGER_MCP_CLIENT_SECRET

$CRED_DIR/client_secret.json

OAuth client JSON path

Blogger API v3 Authentication Issuance (Summary)

  1. Create a Google Cloud Projecthttps://console.cloud.google.com/

  2. Enable Blogger API v3 in the API Library

  3. Configure OAuth Consent Screen

    • User Type: External

    • Add Scope: https://www.googleapis.com/auth/blogger

    • Add your Google account as a test user

  4. Credentials → OAuth Client ID

    • Application type: Desktop app

    • Download JSON after creation → ~/.config/blogger-mcp/client_secret.json

  5. Verify Blog ID

    • Use the blogID=... number from the Blogger admin URL or the get_blog_by_url tool.

Detailed project-specific guides are managed in docs/vibe/mcp/blogger-mcp.md of the host project.

Design Notes

  • Stack: TypeScript + Node 18+, @modelcontextprotocol/sdk, googleapis, google-auth-library.

  • Token Storage: ~/.config/blogger-mcp/. Protected by .gitignore.

  • Error Strategy: Tool call failures are automatically wrapped by MCP. If authentication is missing, guide the user with the message No stored token. Run npm run auth first..

  • Expansion Roadmap:

    • Markdown → HTML conversion tool (based on marked)

    • Image upload (Blogger requires bypassing Picasa/Google Photos → future option)

    • Scheduled publishing (setting the published field)

Development

npm run dev       # tsc --watch
npm run build     # dist/ 생성
npm start         # dist/index.js 실행 (MCP stdio 서버)
npm run auth      # OAuth 최초 인증

License

MIT

Available Tools

9 tools
create_postC

Create a new blog post. Content is HTML; labels is a list of tags. isDraft=true saves as draft.

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdYes
titleYes
contentYesHTML body
labelsNoTags/labels
isDraftNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdYes
postIdYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

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 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)

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

C2.9/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 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdYes
postIdYes

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdYes
maxResultsNo
statusNoFilter by status (optional)

TDQS

C2.9/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 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdYes
postIdYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

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 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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdYes
postIdYes

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

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 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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdYes
postIdYes
titleNo
contentNo
labelsNo

TDQS

C2.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 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 9 tool updatesv0.1.0
    • First observedcreate_post
    • First observeddelete_post
    • First observedget_blog_by_url
    • First observedget_post
    • First observedlist_blogs
    • First observedlist_posts
    • First observedpublish_post
    • First observedrevert_post
    • First observedupdate_post

TDQS

A3.5/5.0

Scored across 9 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers