Skip to main content
Glama
aleck31
by aleck31

Blogger MCP Server

An MCP (Model Context Protocol) server that provides Claude and other MCP-compatible AI assistants with full access to the Google Blogger API v3. Supports reading, creating, updating, publishing, and deleting blog posts through natural language.

Features

  • Blog management — List all blogs under your account, get blog metadata

  • Post lifecycle — Create drafts, edit, publish, revert to draft, delete

  • Read operations — List posts, retrieve individual posts, search by keyword

  • Draft-first workflow — Posts are created as drafts by default for safety, then published explicitly

  • Dual authentication — API Key for read-only access, OAuth 2.0 for full read/write access

  • File-based content — Load post content from local HTML files (recommended for content > 10KB)

  • Automatic token management — OAuth tokens are cached, refreshed, and persisted automatically to ~/.config/mcp-blogger/

  • Default blog — Set DEFAULT_BLOG_ID to skip passing blogId on every tool call

Related MCP server: MCP Blogger Posting Server

Project Structure

mcp-blogger/
├── index.js          # Main MCP server — tool definitions and handlers
├── oauth.js          # OAuth 2.0 authentication flow
└── package.json      # Project metadata and dependencies

Prerequisites

  • Node.js >= 22

  • A Google Cloud project with the Blogger API enabled

  • A Blogger API Key (for read operations) and/or OAuth 2.0 credentials (for write operations)

Installation

git clone https://github.com/aleck31/mcp-blogger.git
cd mcp-blogger
npm install

Authentication

This server supports two authentication methods. At least one must be configured:

  • API Key only — read-only operations (get_blog_info, list_posts, get_post, search_posts)

  • OAuth only — full read and write operations

  • Both — API Key for reads, OAuth for writes

1. Get a Blogger API Key (read-only access)

  1. Go to the Google Cloud Console

  2. Create a project (or select an existing one)

  3. Enable the Blogger API v3 under APIs & Services > Library

  4. Go to APIs & Services > Credentials

  5. Click Create Credentials > API key

  6. Copy the generated API key

2. Get OAuth 2.0 Credentials (read + write access)

  1. In the same Google Cloud project, go to APIs & Services > Credentials

  2. Click Create Credentials > OAuth client ID

  3. Select Web application as the application type

  4. Add http://localhost:3000/oauth/callback to Authorized redirect URIs

  5. Copy the Client ID and Client Secret

3. OAuth Flow (automatic)

On the first write operation, the server will automatically:

  1. Start a temporary local HTTP server on port 3000

  2. Open your browser to the Google OAuth consent page

  3. After you grant access, capture the authorization code via the callback URL

  4. Exchange the code for access and refresh tokens

  5. Persist tokens to ~/.config/mcp-blogger/tokens.json

Subsequent write operations reuse cached tokens and refresh them automatically when expired. The OAuth flow times out after 5 minutes if not completed.

Configuration

Set the following environment variables in your MCP client configuration:

Variable

Required

Description

BLOGGER_API_KEY

For read ops

Google Blogger API key

GOOGLE_CLIENT_ID

For write ops

OAuth 2.0 Client ID

GOOGLE_CLIENT_SECRET

For write ops

OAuth 2.0 Client Secret

DEFAULT_BLOG_ID

No

Default Blog ID, used when blogId is omitted from tool calls

MCP Config Example

Add the server to your Agent MCP configuration file (such as mcp_config.json):

{
  "mcpServers": {
    "blogger": {
      "command": "npx",
      "args": ["-y", "mcp-blogger"],
      "env": {
        "BLOGGER_API_KEY": "your-api-key",
        "GOOGLE_CLIENT_ID": "your-client-id",
        "GOOGLE_CLIENT_SECRET": "your-client-secret",
        "DEFAULT_BLOG_ID": "your-default-blog-id"
      }
    }
  }
}

Claude Code

Add the server via the Claude Code CLI:

claude mcp add blogger -- npx -y mcp-blogger \
  -e BLOGGER_API_KEY=your-api-key \
  -e GOOGLE_CLIENT_ID=your-client-id \
  -e GOOGLE_CLIENT_SECRET=your-client-secret \
  -e DEFAULT_BLOG_ID=your-default-blog-id

Tools

All tools that accept blogId will fall back to DEFAULT_BLOG_ID if set.

Category

Tool

OAuth

Description

Account

list_blogs

Yes

List all blogs owned by the authenticated user

Read

get_blog_info

No

Get blog metadata by URL or ID

Read

list_posts

No

List published posts

Read

get_post

No

Get a specific post (supports drafts with OAuth)

Read

search_posts

No

Search posts by keyword

Write

list_drafts

Yes

List draft posts

Write

create_post

Yes

Create a post (draft by default). Use content_file for large content

Write

change_post_status

Yes

Publish a draft or revert a published post to draft

Write

update_post

Yes

Update a post (supports both published and draft)

Write

delete_post

Yes

Delete a post

Typical Workflow

list_blogs                          # Find your blog ID
create_post (draft by default)      # Write content
get_post                            # Preview the draft
update_post                         # Revise if needed
change_post_status action=publish   # Go live
change_post_status action=revert    # Unpublish if needed

Dependencies

License

MIT

Available Tools

10 tools
change_post_statusB

Publish a draft post or revert a published post to draft

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdNoBlog ID (optional if DEFAULT_BLOG_ID is set)
postIdYesPost ID
actionYesAction to perform: "publish" to publish a draft, "revert" to revert a published post to draft

TDQS

B3.4/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 full burden. It states the tool performs mutations (publish/revert) but lacks critical behavioral details: whether it requires specific permissions, if changes are reversible, what happens to scheduled posts, or error conditions. For a mutation tool with zero annotation coverage, this is inadequate.

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 functionality with zero wasted words. It directly addresses the tool's purpose without redundancy 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?

Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It lacks information on permissions, side effects, error handling, or return values, which are critical for safe and effective use. The schema covers parameters well, but behavioral context is insufficient.

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 100%, so the schema fully documents all parameters (blogId, postId, action with enum). The description adds no parameter-specific semantics beyond what the schema provides, such as explaining blogId optionality or action implications. Baseline 3 is appropriate when schema does the heavy lifting.

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 clearly states the specific action ('publish' or 'revert') and resource ('draft post' or 'published post'), distinguishing it from siblings like create_post, update_post, or delete_post. It explicitly defines the bidirectional status change, which is not implied by the tool name alone.

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 usage by specifying the two actions (publish draft or revert to draft), but does not explicitly state when to use this tool versus alternatives like update_post for other modifications, or list_drafts to view draft status. No exclusions or prerequisites are mentioned.

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

create_postC

Create a new blog post

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdNoBlog ID (optional if DEFAULT_BLOG_ID is set)
titleYesPost title
contentNoPost content (HTML allowed). For content larger than 10KB, use content_file instead to avoid parameter size limits.
content_fileNoPath to a file containing post content (HTML). Recommended for large posts. Takes precedence over content if both are provided.
labelsNoPost labels/tags (optional)
isDraftNoWhether to create as draft (default: true)

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 full burden for behavioral disclosure but only states the basic action. It doesn't mention authentication requirements, rate limits, whether the operation is idempotent, what happens on failure, or what the response looks like. For a creation tool with zero annotation coverage, this is inadequate.

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 states the core purpose without unnecessary words. It's appropriately sized for a tool with comprehensive schema documentation.

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 creation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after creation, what identifiers are returned, error conditions, or how this tool fits within the broader blog management workflow alongside its 8 sibling tools.

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 100%, so the schema already documents all 6 parameters thoroughly. The description adds no additional parameter information beyond what's in the schema, meeting the baseline for high schema coverage but not providing extra value.

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') and resource ('new blog post'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its sibling 'update_post' or explain how it differs from other content creation tools in the server.

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 'change_post_status'. There's no mention of prerequisites, dependencies, or typical use cases beyond the basic action.

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 blog post

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdNoBlog ID (optional if DEFAULT_BLOG_ID is set)
postIdYesPost ID

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 full burden for behavioral disclosure. 'Delete a blog post' implies a destructive mutation, but it doesn't specify whether deletion is permanent or reversible, what permissions are required, or what happens to associated data (comments, tags). This leaves significant behavioral gaps for a destructive operation.

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's appropriately sized for a simple delete operation and front-loads the essential information immediately.

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 destructive mutation tool with no annotations and no output schema, the description is inadequate. It doesn't address critical context like whether deletion is permanent, what confirmation might be needed, error conditions, or return values. The simplicity of the operation doesn't compensate for these omissions.

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 100%, with both parameters (blogId and postId) documented in the schema. The description adds no additional parameter information beyond what's already in the structured schema, so it meets the baseline for high schema coverage without compensating value.

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 'Delete a blog post' clearly states the action (delete) and resource (blog post), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'change_post_status' which might also affect post deletion/status changes, missing full 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 'change_post_status' (which might handle soft deletion) and 'update_post' (which might modify content), there's no indication of when deletion is appropriate versus other post-modification operations.

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

get_blog_infoB

Get information about a blog by URL or ID

ParametersJSON Schema
NameRequiredDescriptionDefault
blogUrlYesBlog URL (e.g., myblog.blogspot.com) or Blog ID

TDQS

B3.2/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 full burden. It states the tool's function but doesn't disclose behavioral traits such as whether it's read-only (implied by 'get'), authentication requirements, rate limits, error handling, or what happens with invalid inputs. For a tool with zero 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 zero waste. It's front-loaded with the core purpose and includes essential details (URL or ID). Every word earns its place, making it highly concise and well-structured.

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 no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't explain what information is returned (e.g., blog title, author, posts count), error cases, or behavioral context. For a tool in a server with multiple siblings, more guidance on output and usage would improve completeness.

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 100%, with the parameter 'blogUrl' documented as accepting 'Blog URL (e.g., myblog.blogspot.com) or Blog ID'. The description adds minimal value beyond this, only repeating that it accepts 'URL or ID'. Baseline 3 is appropriate since the schema does the heavy lifting, but no additional semantics 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 ('Get information') and resource ('about a blog'), specifying it can be done by 'URL or ID'. It distinguishes from siblings like 'list_blogs' (which lists multiple blogs) and 'get_post' (which gets post info). However, it doesn't specify what type of information is returned (e.g., metadata, settings, statistics).

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 usage when you need blog information and have either a URL or ID. It doesn't explicitly state when to use this vs. 'list_blogs' (for listing all blogs) or 'get_post' (for post details), nor does it mention prerequisites like authentication. The context is clear but lacks explicit alternatives or exclusions.

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

get_postC

Get a specific post by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdNoBlog ID (optional if DEFAULT_BLOG_ID is set)
postIdYesPost ID

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 full burden for behavioral disclosure. It states the action but doesn't describe what 'get' returns (e.g., full post content, metadata, error behavior), whether it's idempotent, or any rate limits. The description is too minimal to adequately inform the agent about how the tool behaves beyond the basic operation.

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 communicates the core purpose without any wasted words. It's appropriately sized for a simple retrieval tool and front-loads the essential information. Every word earns its place in this minimal but complete statement.

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 (2 parameters, no output schema), the description is incomplete. It doesn't explain what 'get' returns, which is critical for a retrieval tool. With no annotations and no output schema, the agent lacks necessary context about the response format, making the description inadequate despite the straightforward operation.

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 100%, so the schema already documents both parameters thoroughly. The description adds no additional parameter information beyond implying 'ID' refers to postId. Since the schema does the heavy lifting, the baseline score of 3 is appropriate—the description doesn't add value but doesn't detract either.

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 ('Get') and resource ('a specific post by ID'), making the purpose immediately understandable. It distinguishes from siblings like list_posts or search_posts by specifying retrieval of a single item. However, it doesn't explicitly mention what 'get' entails (e.g., retrieving metadata/content), 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 when to choose get_post over list_posts for single items, or how it differs from get_blog_info for blog-level data. There's also no indication of prerequisites like authentication or blog context, leaving usage context implied at best.

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

list_blogsA

List all blogs for the authenticated user (OAuth required)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/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 OAuth is required for authentication, which is a key behavioral trait. However, it lacks details on other aspects like whether it's read-only (implied by 'List'), rate limits, pagination behavior, or error handling, making it somewhat incomplete for a tool with no annotation support.

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 ('List all blogs') and includes essential context ('for the authenticated user' and 'OAuth required') without any wasted words. It's appropriately sized for a simple tool with no parameters.

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?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate. It covers authentication needs but lacks details on output format (e.g., what data is returned, structure), error cases, or behavioral nuances like pagination. For a list operation, this leaves gaps that could hinder an AI agent's ability to use it effectively without additional context.

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% coverage, meaning no parameters are defined. The description adds context by specifying the scope ('for the authenticated user') and authentication requirement ('OAuth required'), which provides semantic meaning beyond the empty schema. Since there are no parameters, the baseline is 4, as the description compensates adequately for the lack of parameter 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 clearly states the action ('List all blogs') and the resource ('blogs'), specifying it's for the authenticated user. However, it doesn't distinguish this tool from sibling tools like 'get_blog_info' or 'list_posts', which might also retrieve blog-related information but with different scopes or filters.

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 usage context by mentioning 'for the authenticated user' and 'OAuth required', which suggests when authentication is needed. However, it doesn't explicitly state when to use this tool versus alternatives like 'get_blog_info' (which might fetch details for a specific blog) or 'list_posts' (which lists posts within blogs), leaving some ambiguity in sibling differentiation.

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

list_draftsB

List draft posts from a blog

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdNoBlog ID (optional if DEFAULT_BLOG_ID is set)
maxResultsNoMaximum number of drafts to return (default: 10)

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 of behavioral disclosure. It states what the tool does but doesn't describe how it behaves: no information about pagination, sorting, error conditions, authentication needs, rate limits, or what happens when no drafts exist. For a read operation with zero annotation coverage, this leaves significant behavioral gaps.

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, clear sentence with zero wasted words. It's front-loaded with the core purpose and appropriately sized for a simple list operation. Every word earns its place, making it efficient and easy to parse.

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?

Given the tool's low complexity (simple list operation) and high schema coverage (100%), the description is minimally adequate. However, with no annotations and no output schema, it should ideally provide more behavioral context (e.g., return format, pagination). It's complete enough for basic use but lacks depth for robust agent operation.

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 100%, so the schema fully documents both parameters (blogId and maxResults). The description adds no parameter-specific information beyond what's in the schema, such as format details or usage examples. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't need to.

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 ('draft posts from a blog'), making the purpose immediately understandable. It distinguishes from siblings like 'list_posts' by specifying 'draft' posts, though it doesn't explicitly contrast with 'list_posts' which likely lists published posts. The description is specific but lacks explicit 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. It doesn't mention when to choose 'list_drafts' over 'list_posts' or 'search_posts', nor does it specify prerequisites or exclusions. The agent must infer usage from the name alone, which is insufficient for optimal tool selection.

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 from a blog

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdNoBlog ID (optional if DEFAULT_BLOG_ID is set)
maxResultsNoMaximum number of posts to return (default: 10)

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 mentions 'List posts' but doesn't disclose behavioral traits such as pagination, sorting, default filters (e.g., published status), rate limits, or authentication needs. This leaves significant gaps for an agent to understand how the tool behaves.

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 waste. It's appropriately sized and front-loaded, directly stating the tool's purpose without 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?

Given the complexity of listing operations and lack of annotations or output schema, the description is incomplete. It doesn't cover key aspects like return format, pagination, filtering behavior, or how it differs from siblings. For a tool with 2 parameters and no structured support, more context 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 100%, with clear documentation for both parameters (blogId and maxResults). The description adds no additional meaning beyond the schema, such as explaining what 'list' entails in relation to these parameters. Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose3/5

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

The description 'List posts from a blog' clearly states the verb ('List') and resource ('posts from a blog'), but it's vague about scope and doesn't differentiate from sibling tools like 'list_drafts' or 'search_posts'. It specifies the resource type but lacks detail on what 'list' entails (e.g., all posts, published only).

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 is provided on when to use this tool versus alternatives like 'list_drafts' (for drafts), 'search_posts' (for filtered searches), or 'get_post' (for a single post). The description implies a general listing but offers no context on use cases or exclusions.

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

search_postsC

Search for posts in a blog

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdNoBlog ID (optional if DEFAULT_BLOG_ID is set)
queryYesSearch query

TDQS

C2.7/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 but only states the basic action without disclosing behavioral traits like permissions, rate limits, or response format. It doesn't mention whether it's read-only, how results are returned, or any constraints, leaving significant gaps in understanding the tool's 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 a single, efficient sentence with zero waste, front-loading the core action. It's appropriately sized for a simple tool, making it easy to parse without 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?

Given no annotations, no output schema, and a mutation-heavy sibling set, the description is incomplete. It doesn't address key aspects like return values, error handling, or how it differs from other read operations, making it inadequate for full contextual understanding.

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 100%, so the schema fully documents parameters. The description adds no additional meaning beyond implying search functionality, which aligns with the 'query' parameter. Baseline 3 is appropriate as the schema handles parameter documentation adequately.

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

Purpose3/5

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

The description 'Search for posts in a blog' clearly states the action (search) and resource (posts in a blog), but it's vague about scope and doesn't distinguish from siblings like 'list_posts' or 'get_post'. It specifies the target (posts) but lacks detail on search behavior or context.

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 is provided on when to use this tool versus alternatives such as 'list_posts' (for unfiltered listing) or 'get_post' (for retrieving a specific post). The description implies search functionality but doesn't clarify use cases or exclusions, leaving the agent to infer usage.

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 blog post

ParametersJSON Schema
NameRequiredDescriptionDefault
blogIdNoBlog ID (optional if DEFAULT_BLOG_ID is set)
postIdYesPost ID
titleNoNew post title (optional)
contentNoNew post content (HTML allowed, optional). For content larger than 10KB, use content_file instead to avoid parameter size limits.
content_fileNoPath to a file containing new post content (HTML). Recommended for large posts. Takes precedence over content if both are provided.
labelsNoNew post labels/tags (optional)

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 states 'Update' which implies mutation, but doesn't mention permissions needed, whether changes are reversible, rate limits, or what happens to unspecified fields (e.g., are they preserved or reset?). The description lacks critical behavioral context 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 a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose ('Update an existing blog post'), making it immediately scannable and appropriately sized for the tool's complexity.

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 6 parameters, no annotations, and no output schema, the description is insufficient. It doesn't address behavioral aspects (permissions, side effects), provide usage context relative to siblings, or explain what the tool returns. The high schema coverage helps with parameters, but other critical context is missing.

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 adds no parameter-specific information beyond what's already in the schema (which has 100% coverage). It doesn't explain relationships between parameters (e.g., 'content' vs 'content_file'), provide examples, or clarify edge cases. With high schema coverage, the baseline score of 3 is appropriate as the schema handles most 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 clearly states the action ('Update') and resource ('an existing blog post'), making the purpose immediately understandable. It distinguishes from siblings like 'create_post' (new posts) and 'delete_post' (removal), though it doesn't explicitly differentiate from 'change_post_status' which might overlap in some contexts.

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 'change_post_status' for status-only updates or 'create_post' for new posts. It mentions 'existing blog post' but doesn't clarify prerequisites (e.g., post must exist) or exclusions (e.g., cannot create new posts).

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

TDQS

A3.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific resources and actions: list_blogs vs. get_blog_info, list_posts vs. search_posts vs. list_drafts, and create/update/delete/change_status for posts. No ambiguity exists between tools.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with snake_case (e.g., create_post, list_blogs, update_post). The naming is predictable and uniform across all 10 tools.

Tool Count5/5

With 10 tools, the server is well-scoped for a blogging platform, covering blog management, post CRUD operations, and listing/searching functions. Each tool earns its place without bloat.

Completeness5/5

The tool set provides complete CRUD/lifecycle coverage for the blogging domain: create, get, update, delete, and status change for posts, plus blog listing/info and post listing/searching. No obvious gaps exist for core workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aleck31/mcp-blogger'

If you have feedback or need assistance with the MCP directory API, please join our Discord server