Skip to main content
Glama
Automattic

WordPress MCP

Official
by Automattic

This repository will be deprecated as the mcp-adapter AI Building Block for WordPress continues releasing stable versions.

The shift aligns with two important developments:

  • The Abilities API is moving into WordPress Core as of version 6.9.

  • mcp-adapter is now stable and will become the canonical plugin and Composer package for MCP integration in WordPress.

We encourage all users to migrate to mcp-adapter. Future work, including new features and fixes, will happen there. This repository will remain available in archived form for historical reference.

WordPress MCP

Latest Release

A comprehensive WordPress plugin that implements the Model Context Protocol (MCP) to expose WordPress functionality through standardized interfaces. This plugin enables AI models and applications to interact with WordPress sites securely using multiple transport protocols and enterprise-grade authentication.

Features

  • Dual Transport Protocols: STDIO and HTTP-based (Streamable) transports

  • JWT Authentication: Secure token-based authentication with management UI

  • Admin Interface: React-based token management and settings dashboard

  • AI-Friendly APIs: JSON-RPC 2.0 compliant endpoints for AI integration

  • Extensible Architecture: Custom tools, resources, and prompts support

  • WordPress Feature API: Adapter for standardized WordPress functionality

  • Experimental REST API CRUD Tools: Generic tools for any WordPress REST API endpoint

  • Comprehensive Testing: 200+ test cases covering all protocols and authentication

  • High Performance: Optimized routing and caching mechanisms

  • Enterprise Security: Multi-layer authentication and audit logging

Related MCP server: wp-mcp

Architecture

The plugin implements a dual transport architecture:

WordPress MCP Plugin
├── Transport Layer
│   ├── McpStdioTransport (/wp/v2/wpmcp)
│   └── McpStreamableTransport (/wp/v2/wpmcp/streamable)
├── Authentication
│   └── JWT Authentication System
├── Method Handlers
│   ├── Tools, Resources, Prompts
│   └── System & Initialization
└── Admin Interface
    └── React-based Token Management

Transport Protocols

Protocol

Endpoint

Format

Authentication

Use Case

STDIO

/wp/v2/wpmcp

WordPress-style

JWT + App Passwords

Legacy compatibility

Streamable

/wp/v2/wpmcp/streamable

JSON-RPC 2.0

JWT only

Modern AI clients

Installation

Quick Install

  1. Download wordpress-mcp.zip from releases

  2. Upload to /wp-content/plugins/wordpress-mcp directory

  3. Activate through WordPress admin 'Plugins' menu

  4. Navigate to Settings > WordPress MCP to configure

Composer Install (Development)

cd wp-content/plugins/
git clone https://github.com/Automattic/wordpress-mcp.git
cd wordpress-mcp
composer install --no-dev
npm install && npm run build

Authentication Setup

JWT Token Generation

  1. Go to Settings > WordPress MCP > Authentication Tokens

  2. Select token duration (1-24 hours)

  3. Click "Generate New Token"

  4. Copy the token for use in your MCP client

MCP Client Configuration

Claude Desktop Configuration using mcp-wordpress-remote proxy

Add to your Claude Desktop claude_desktop_config.json:

{
	"mcpServers": {
		"wordpress-mcp": {
			"command": "npx",
			"args": [ "-y", "@automattic/mcp-wordpress-remote@latest" ],
			"env": {
				"WP_API_URL": "https://your-site.com/",
				"JWT_TOKEN": "your-jwt-token-here",
				"LOG_FILE": "optional-path-to-log-file"
			}
		}
	}
}

Using Application Passwords (Alternative)

{
	"mcpServers": {
		"wordpress-mcp": {
			"command": "npx",
			"args": [ "-y", "@automattic/mcp-wordpress-remote@latest" ],
			"env": {
				"WP_API_URL": "https://your-site.com/",
				"WP_API_USERNAME": "your-username",
				"WP_API_PASSWORD": "your-application-password",
				"LOG_FILE": "optional-path-to-log-file"
			}
		}
	}
}

VS Code MCP Extension (Direct Streamable Transport)

Add to your VS Code MCP settings:

{
	"servers": {
		"wordpress-mcp": {
			"type": "http",
			"url": "https://your-site.com/wp-json/wp/v2/wpmcp/streamable",
			"headers": {
				"Authorization": "Bearer your-jwt-token-here"
			}
		}
	}
}

MCP Inspector (Development/Testing)

# Using JWT Token with proxy
npx @modelcontextprotocol/inspector \
  -e WP_API_URL=https://your-site.com/ \
  -e JWT_TOKEN=your-jwt-token-here \
  npx @automattic/mcp-wordpress-remote@latest

# Using Application Password with proxy
npx @modelcontextprotocol/inspector \
  -e WP_API_URL=https://your-site.com/ \
  -e WP_API_USERNAME=your-username \
  -e WP_API_PASSWORD=your-application-password \
  npx @automattic/mcp-wordpress-remote@latest

Local Development Configuration

{
	"mcpServers": {
		"wordpress-local": {
			"command": "node",
			"args": [ "/path/to/mcp-wordpress-remote/dist/proxy.js" ],
			"env": {
				"WP_API_URL": "http://localhost:8080/",
				"JWT_TOKEN": "your-local-jwt-token",
				"LOG_FILE": "optional-path-to-log-file"
			}
		}
	}
}

Usage

With MCP Clients

This plugin works seamlessly with MCP-compatible clients in two ways:

Via Proxy:

  • mcp-wordpress-remote - Official MCP client with enhanced features

  • Claude Desktop with proxy configuration for full WordPress and WooCommerce support

  • Any MCP client using the STDIO transport protocol

Direct Streamable Transport:

  • VS Code MCP Extension connecting directly to /wp/v2/wpmcp/streamable

  • Custom HTTP-based MCP implementations using JSON-RPC 2.0

  • Any client supporting HTTP transport with JWT authentication

The streamable transport provides a direct JSON-RPC 2.0 compliant endpoint, while the proxy offers additional features like WooCommerce integration, enhanced logging, and compatibility with legacy authentication methods.

Available MCP Methods

Method

Description

Transport Support

initialize

Initialize MCP session

Both

tools/list

List available tools

Both

tools/call

Execute a tool

Both

resources/list

List available resources

Both

resources/read

Read resource content

Both

prompts/list

List available prompts

Both

prompts/get

Get prompt template

Both

Experimental REST API CRUD Tools

EXPERIMENTAL FEATURE: This functionality is experimental and may change or be removed in future versions.

When enabled via Settings > WordPress MCP > Enable REST API CRUD Tools, the plugin provides three powerful generic tools that can interact with any WordPress REST API endpoint:

Available Tools

Tool Name

Description

Type

list_api_functions

Discover all available WordPress REST API endpoints

Read

get_function_details

Get detailed metadata for specific endpoint/method

Read

run_api_function

Execute any REST API function with CRUD operations

Action

Usage Workflow

  1. Discovery: Use list_api_functions to see all available endpoints

  2. Inspection: Use get_function_details to understand required parameters

  3. Execution: Use run_api_function to perform CRUD operations

Security & Permissions

  • User Capabilities: All operations respect current user permissions

  • Settings Control: Individual CRUD operations can be disabled in settings:

    • Enable Create Tools (POST operations)

    • Enable Update Tools (PATCH/PUT operations)

    • Enable Delete Tools (DELETE operations)

  • Automatic Filtering: Excludes sensitive endpoints (JWT auth, oembed, autosaves, revisions)

Benefits

  • Universal Access: Works with any WordPress REST API endpoint, including custom post types and third-party plugins

  • AI-Friendly: Provides discovery and introspection capabilities for AI agents

  • Standards Compliant: Uses standard HTTP methods (GET, POST, PATCH, DELETE)

  • Permission Safe: Inherits WordPress user capabilities and respects endpoint permissions

Development

Project Structure

wp-content/plugins/wordpress-mcp/
├── includes/                   # PHP classes
│   ├── Core/                  # Transport and core logic
│   ├── Auth/                  # JWT authentication
│   ├── Tools/                 # MCP tools
│   ├── Resources/             # MCP resources
│   ├── Prompts/               # MCP prompts
│   └── Admin/                 # Settings interface
├── src/                       # React components
│   └── settings/              # Admin UI components
├── tests/                     # Test suite
│   └── phpunit/              # PHPUnit tests
└── docs/                      # Documentation

Adding Custom Tools

You can extend the MCP functionality by adding custom tools through your own plugins or themes. Create a new tool class in your plugin or theme:

<?php
declare(strict_types=1);

namespace Automattic\WordpressMcp\Tools;

class MyCustomTool {
    public function register(): void {
        add_action('wp_mcp_register_tools', [$this, 'register_tool']);
    }

    public function register_tool(): void {
        WPMCP()->register_tool([
            'name' => 'my_custom_tool',
            'description' => 'My custom tool description',
            'inputSchema' => [
                'type' => 'object',
                'properties' => [
                    'param1' => ['type' => 'string', 'description' => 'Parameter 1']
                ],
                'required' => ['param1']
            ],
            'callback' => [$this, 'execute'],
        ]);
    }

    public function execute(array $args): array {
        // Your tool logic here
        return ['result' => 'success'];
    }
}

Adding Custom Resources

You can extend the MCP functionality by adding custom resources through your own plugins or themes. Create a new resource class in your plugin or theme:

<?php
declare(strict_types=1);

namespace Automattic\WordpressMcp\Resources;

class MyCustomResource {
    public function register(): void {
        add_action('wp_mcp_register_resources', [$this, 'register_resource']);
    }

    public function register_resource(): void {
        WPMCP()->register_resource([
            'uri' => 'custom://my-resource',
            'name' => 'My Custom Resource',
            'description' => 'Custom resource description',
            'mimeType' => 'application/json',
            'callback' => [$this, 'get_content'],
        ]);
    }

    public function get_content(): array {
        return ['contents' => [/* resource data */]];
    }
}

Testing

Run the comprehensive test suite:

# Run all tests
vendor/bin/phpunit

# Run specific test suites
vendor/bin/phpunit tests/phpunit/McpStdioTransportTest.php
vendor/bin/phpunit tests/phpunit/McpStreamableTransportTest.php
vendor/bin/phpunit tests/phpunit/JwtAuthTest.php

# Run with coverage
vendor/bin/phpunit --coverage-html coverage/

Building Frontend

# Development build
npm run dev

# Production build
npm run build

# Watch mode
npm run start

Security

Best Practices

  • Token Management: Use shortest expiration time needed (1-24 hours)

  • User Permissions: Tokens inherit user capabilities

  • Secure Storage: Never commit tokens to repositories

  • Regular Cleanup: Revoke unused tokens promptly

  • Access Control: Streamable transport requires admin privileges

  • CRUD Operations: Only enable create/update/delete tools when necessary

  • Experimental Features: Use REST API CRUD tools with caution in production environments

Security Features

  • JWT signature validation

  • Token expiration and revocation

  • User capability inheritance

  • Secure secret key generation

  • Audit logging for security events

  • Protection against malformed requests

Testing Coverage

The plugin includes extensive testing:

  • Transport Testing: Both STDIO and Streamable protocols

  • Authentication Testing: JWT generation, validation, and revocation

  • Integration Testing: Cross-transport comparison

  • Security Testing: Edge cases and malformed requests

  • Performance Testing: Load and stress testing

View detailed testing documentation in tests/README.md.

Configuration

Environment Variables

// wp-config.php
define('WPMCP_JWT_SECRET_KEY', 'your-secret-key');
define('WPMCP_DEBUG', true); // Enable debug logging

Plugin Settings

Access via Settings > WordPress MCP:

  • Enable/Disable MCP: Toggle plugin functionality

  • Transport Configuration: Configure STDIO/Streamable transports

  • Feature Toggles: Enable/disable specific tools and resources

  • CRUD Operation Controls: Granular control over create, update, and delete operations

  • Experimental Features: Enable REST API CRUD Tools (experimental functionality)

  • Authentication Settings: JWT token management

CRUD Operation Settings

The plugin provides granular control over CRUD operations:

  • Enable Create Tools: Allow POST operations via MCP tools

  • Enable Update Tools: Allow PATCH/PUT operations via MCP tools

  • Enable Delete Tools: ⚠️ Allow DELETE operations via MCP tools (use with caution)

  • Enable REST API CRUD Tools: 🧪 Enable experimental generic REST API access tools

Security Note: Delete operations can permanently remove data. Only enable delete tools if you trust all users with MCP access.

Contributing

We welcome contributions! Please see our Contributing Guidelines.

Development Setup

  1. Clone the repository

  2. Run composer install for PHP dependencies

  3. Run npm install for JavaScript dependencies

  4. Set up WordPress test environment

  5. Run tests with vendor/bin/phpunit

Documentation

Support

For support and questions:

License

This project is licensed under the GPL v2 or later.


Built with ❤️ by Automattic for the WordPress and AI communities.

Available Tools

5 tools
create-postC

Create a new WordPress post using Gutenberg blocks

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesPost content in WordPress block format. Here is an example of the format: If you given following blocks documentation: ``` Name: core/paragraph Title: Paragraph Description: Start with the basic building block of all narrative. Category: text ##Attributes ###align type: string ###content type: rich-text source: rich-text selector: p role: content ###dropCap type: boolean default: false ###placeholder type: string ###direction type: string enum: ltr,rtl ###lock type: object ###metadata type: object ###className type: string ###style type: object ###backgroundColor type: string ###textColor type: string ###gradient type: string ###fontSize type: string ###fontFamily type: string ###borderColor type: string ``` You can use the following format: ``` <!-- wp:paragraph {"align":"center", "dropCap":true, "direction":"ltr", "fontSize":"large", "fontFamily":"serif", "borderColor":"red", "backgroundColor":"blue", "textColor":"green", "gradient":"linear-gradient(to right, #000000, #ffffff)", "style":{"color":"red", "background-color":"blue"}} --> <p class="has-text-align-center has-drop-cap has-large-font-size has-serif-font-family has-border-color has-background has-text-color has-gradient has-global-padding has-global-margin has-global-color has-global-font-size" style="color:red;background-color:blue;">Your paragraph content here.</p> <!-- /wp:paragraph --> ```
titleYesPost title less than 70 characters

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 full burden. It states 'Create' which implies a write/mutation operation, but doesn't disclose behavioral traits like required permissions, whether it publishes immediately, error handling, or rate limits. For a mutation 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?

Single sentence, zero waste. It's front-loaded with the core purpose and includes a specific implementation detail ('using Gutenberg blocks') that adds value without verbosity. 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?

For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects (permissions, side effects), response format, or error conditions. Given the complexity of creating posts with Gutenberg blocks, more context is needed for effective agent use.

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 (title and content) with detailed examples and constraints. The description adds no parameter-specific information beyond what's in the schema. 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.

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 ('WordPress post') with the specific implementation detail 'using Gutenberg blocks'. It distinguishes from siblings like get-post (read) and update-post (modify), though not explicitly named. The purpose is specific but could more directly contrast with siblings.

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 like update-post or search-posts. The description implies it's for new posts but doesn't state prerequisites (e.g., authentication, permissions) or exclusions (e.g., not for drafts). Usage context is implied but not explicit.

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 WordPress post by its ID

ParametersJSON Schema
NameRequiredDescriptionDefault
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. While 'Get' implies a read operation, it doesn't specify whether this requires authentication, returns errors for invalid IDs, or includes metadata like post content or status. This leaves significant gaps for a tool with no 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 that front-loads the core purpose without unnecessary words. Every part ('Get a WordPress post by its ID') contributes directly to understanding the tool's function, making it optimally concise.

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 tool with no annotations and no output schema, the description is insufficient. It doesn't explain what data is returned (e.g., post content, author, date), error conditions, or authentication needs, leaving the agent with incomplete context for proper invocation.

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 description coverage is 100%, with the parameter 'postId' documented as 'Post ID' with a minimum of 0. The description adds no additional semantic context beyond what the schema provides, such as format examples or ID sources, meeting the baseline for high schema coverage.

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 WordPress post by its ID'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'search-posts' or 'wordpress-block-types-schema', 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 'search-posts' or 'create-post'. It lacks context about prerequisites (e.g., needing a valid post ID) or exclusions, leaving the agent to 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.

search-postsC

Search for WordPress posts by title or keyword

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesPost title or keyword

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 full burden. It mentions searching but doesn't disclose behavioral traits such as whether it returns partial matches, case sensitivity, pagination, rate limits, or error handling. The description is minimal and lacks critical operational details.

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, clearly 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 no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't explain what the tool returns (e.g., list of posts, error messages) or behavioral aspects like search scope or limitations, leaving gaps for an AI agent to understand full usage.

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 'title' documented as 'Post title or keyword'. The description adds minimal value by echoing 'title or keyword' but doesn't provide additional semantics beyond what the schema already states, such as search behavior or examples.

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 ('Search for') and resource ('WordPress posts'), and specifies the search criteria ('by title or keyword'). It doesn't explicitly differentiate from sibling tools like 'get-post' or 'create-post', but the search functionality is distinct enough to imply 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 like 'get-post' (which might retrieve a specific post by ID) or 'create-post'. It lacks explicit context, exclusions, or prerequisites for 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 a WordPress post using Gutenberg blocks

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesPost content in WordPress block format. Here is an example of the format: If you given following blocks documentation: ``` Name: core/paragraph Title: Paragraph Description: Start with the basic building block of all narrative. Category: text ##Attributes ###align type: string ###content type: rich-text source: rich-text selector: p role: content ###dropCap type: boolean default: false ###placeholder type: string ###direction type: string enum: ltr,rtl ###lock type: object ###metadata type: object ###className type: string ###style type: object ###backgroundColor type: string ###textColor type: string ###gradient type: string ###fontSize type: string ###fontFamily type: string ###borderColor type: string ``` You can use the following format: ``` <!-- wp:paragraph {"align":"center", "dropCap":true, "direction":"ltr", "fontSize":"large", "fontFamily":"serif", "borderColor":"red", "backgroundColor":"blue", "textColor":"green", "gradient":"linear-gradient(to right, #000000, #ffffff)", "style":{"color":"red", "background-color":"blue"}} --> <p class="has-text-align-center has-drop-cap has-large-font-size has-serif-font-family has-border-color has-background has-text-color has-gradient has-global-padding has-global-margin has-global-color has-global-font-size" style="color:red;background-color:blue;">Your paragraph content here.</p> <!-- /wp:paragraph --> ```
postIdYesPost ID

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 full burden. 'Update' implies a mutation operation, but the description doesn't disclose behavioral traits like permissions required, whether changes are reversible, error handling for invalid post IDs, or rate limits. It mentions Gutenberg blocks but doesn't explain what happens if content format is incorrect. For a mutation tool with zero annotation coverage, this is a significant gap in behavioral context.

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 and is appropriately sized for the tool's complexity. However, it could be more structured by separating purpose from technical details, but this is minor given its brevity.

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 complexity (mutation tool with no annotations and no output schema), the description is incomplete. It doesn't cover behavioral aspects like side effects, error conditions, or return values. While the schema handles parameters well, the description fails to provide necessary context for safe and effective use, especially for a write operation in a system like WordPress.

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 well-documented in the schema: postId as 'Post ID' and content with detailed format examples. The description adds no additional parameter semantics beyond what's in the schema, such as explaining the relationship between parameters or constraints. Baseline 3 is appropriate when schema does the heavy lifting, but no extra value is added.

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 ('WordPress post') with specific technology context ('using Gutenberg blocks'). It distinguishes from create-post (creation vs update) and get-post/search-posts (read vs write), though not explicitly. The purpose is specific but could better differentiate from siblings like 'update-post' vs 'create-post' by mentioning it modifies existing posts.

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. It doesn't mention prerequisites (e.g., needing an existing post ID), when to choose update-post over create-post for modifications, or any limitations. The description assumes context but provides no explicit usage rules, leaving the agent to infer 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.

wordpress-block-types-schemaC

Available WordPress block types that can be used for content creation

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/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 mentions 'available WordPress block types' but doesn't disclose behavioral traits such as whether this is a read-only operation, if it requires authentication, or how data is returned (e.g., list, schema). The description is vague and lacks critical operational details for a tool with no structured annotations.

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 directly states the tool's focus. It's appropriately sized for a simple tool with no parameters, though it could be more front-loaded with action verbs (e.g., 'List available WordPress block types...') to improve clarity without adding waste.

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 lack of annotations and output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., a list of block types, their schemas, or usage examples), which is crucial for a tool with no parameters. For a tool that likely provides data, more context on output behavior is needed to be fully helpful.

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

Parameters4/5

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

The tool has 0 parameters, and schema description coverage is 100% (since there are no parameters to describe). The description doesn't need to add parameter semantics, so it meets the baseline of 4 for tools with no parameters, as it doesn't have to compensate for any gaps.

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 states the tool provides 'available WordPress block types that can be used for content creation,' which gives a general purpose but lacks specificity about what action the tool performs (e.g., list, retrieve, or describe). It distinguishes from siblings like create-post or update-post by focusing on block types rather than posts, but doesn't clarify if it's a read operation or configuration tool.

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 explicit guidance on when to use this tool versus alternatives is provided. The description implies it's for content creation, but it doesn't specify scenarios (e.g., before creating a post to know available blocks) or exclusions. Without annotations or context, usage is implied but not clearly defined.

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. Dates show when Glama detected each change.

  1. 5 tool updatesv1.0.0
    • First observedcreate-post
    • First observedget-post
    • First observedsearch-posts
    • First observedupdate-post
    • First observedwordpress-block-types-schema

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: create-post, get-post, search-posts, and update-post cover different CRUD operations for posts, while wordpress-block-types-schema provides metadata for content creation. There is no overlap or ambiguity between these tools.

Naming Consistency4/5

Four tools follow a consistent verb-noun pattern (create-post, get-post, search-posts, update-post), but wordpress-block-types-schema deviates with a longer, descriptive name. This minor inconsistency slightly reduces the overall naming coherence.

Tool Count5/5

With 5 tools, this server is well-scoped for managing WordPress posts. The count is appropriate for the domain, covering core operations without being overly sparse or bloated, and each tool serves a clear purpose.

Completeness4/5

The tool set provides good coverage for WordPress post management with create, read, update, and search operations, plus block type information. A minor gap is the lack of a delete-post tool, which agents might need to work around, but core workflows are well-supported.

Maintenance

ActivityInactive
ResponsivenessSyncing

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/Automattic/wordpress-mcp'

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