MCP WordPress CrunchTools
Manage WordPress content securely through MCP, covering site info, posts, pages, media, comments, revisions, search, and scheduled publishing.
Check site information and test API connectivity.
List, search, get, create, update, edit, delete/trash posts; manage categories/tags; view revisions; schedule publishing; use version checks and draft-only edits.
List, get, create, update, edit, delete/trash pages; view page revisions; manage hierarchy, templates, menu order, and featured media.
List, get, upload, update, delete media; retrieve public media URLs.
List, get, create, update, delete/trash comments; moderate comments by approving, holding, marking spam, or trashing.
Use security-focused features such as credential protection, input validation, SSRF prevention, TLS enforcement, rate-limit handling, size limits, and timeouts.
Provides tools for managing WordPress content, including posts, pages, media, and comments, with capabilities such as listing, creating, updating, deleting, searching, scheduling, and moderating comments.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP WordPress CrunchToolscreate a new blog post summarizing my latest project"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP WordPress CrunchTools
A secure MCP (Model Context Protocol) server for WordPress content management. Designed for developers publishing about their work.
Overview
This MCP server is designed to be:
Secure by default - Input validation, credential protection, and SSRF prevention
No third-party services - Runs locally via stdio, your credentials never leave your machine
Cross-platform - Works on Linux, macOS, and Windows
Automatically updated - GitHub Actions monitor for CVEs and update dependencies
Containerized - Available at
quay.io/crunchtools/mcp-wordpress
Related MCP server: TypeScript WordPress MCP Server
Naming Convention
Component | Name |
GitHub repo | |
Container |
|
Python package (PyPI) |
|
CLI command |
|
Module import |
|
Features
33 Tools for posts, pages, media, and comments
Security-focused: Credentials protected, input validation, SSRF prevention
Developer workflow: Scheduled publishing, revisions, search
Easy integration: Works with Claude Code and other MCP clients
Installation
With uvx (recommended)
uvx mcp-wordpress-crunchtoolsWith pip
pip install mcp-wordpress-crunchtools
mcp-wordpress-crunchtoolsWith Container
# Create a shared upload directory (required before first run)
mkdir -p ~/.local/share/mcp-uploads-downloads
podman run -v ~/.local/share/mcp-uploads-downloads:/tmp/mcp-uploads:z \
-e WORDPRESS_URL=https://example.com \
-e WORDPRESS_USERNAME=admin \
-e WORDPRESS_APP_PASSWORD='xxxx xxxx xxxx xxxx' \
quay.io/crunchtools/mcp-wordpressSELinux note: Use
:z(lowercase, shared) instead of:Z(uppercase, private). MCP servers run as long-lived stdio processes. With:Z, files copied into the directory after container start won't have the container's private MCS label and will be invisible inside the container. The:zflag sets a sharedcontainer_file_tcontext that all containers and the host can read/write.Tip: Use the same shared directory (
~/.local/share/mcp-uploads-downloads/) across multiple MCP container servers (e.g., mcp-wordpress and mcp-gemini) so generated files are immediately available for upload without copying.
From source
git clone https://github.com/crunchtools/mcp-wordpress.git
cd mcp-wordpress
uv sync --all-extras
uv run mcp-wordpress-crunchtoolsConfiguration
Set these environment variables:
Variable | Description | Example |
| WordPress site URL |
|
| WordPress username |
|
| Application password |
|
| Upload directory inside container (optional) |
|
Creating an Application Password
Log in to WordPress admin
Go to Users → Profile
Scroll to Application Passwords
Enter a name (e.g., "MCP Server") and click Add New
Copy the generated password (shown once)
Usage with Claude Code
Using uvx (recommended)
claude mcp add mcp-wordpress-crunchtools \
--env WORDPRESS_URL=https://example.com \
--env WORDPRESS_USERNAME=admin \
--env WORDPRESS_APP_PASSWORD="xxxx xxxx xxxx xxxx" \
-- uvx mcp-wordpress-crunchtoolsUsing pip
pip install mcp-wordpress-crunchtools
claude mcp add mcp-wordpress-crunchtools \
--env WORDPRESS_URL=https://example.com \
--env WORDPRESS_USERNAME=admin \
--env WORDPRESS_APP_PASSWORD="xxxx xxxx xxxx xxxx" \
-- mcp-wordpress-crunchtoolsUsing Container
# Create a shared upload directory (required before first run)
mkdir -p ~/.local/share/mcp-uploads-downloads
claude mcp add mcp-wordpress-crunchtools \
--env WORDPRESS_URL=https://example.com \
--env WORDPRESS_USERNAME=admin \
--env WORDPRESS_APP_PASSWORD="xxxx xxxx xxxx xxxx" \
-- podman run -i --rm \
-v ~/.local/share/mcp-uploads-downloads:/tmp/mcp-uploads:z \
-e WORDPRESS_URL \
-e WORDPRESS_USERNAME \
-e WORDPRESS_APP_PASSWORD \
quay.io/crunchtools/mcp-wordpressAvailable Tools
Site Tools
Tool | Description |
| Get site title, description, URL, timezone |
| Verify API credentials work |
Editing Model
Reads return the source the editor saved (context=edit), never the rendered page, so what
an agent reads is safe to write back. Changes go through the edit_* tools: the agent sends
the exact text to replace and its replacement, the server applies it to the current source,
and the post never round-trips through the agent. The post and page update and edit tools
take an optional expected_version (the version get_post or get_page returned); when
it is given, the write is refused if the item changed since. update_* refuses content that
is rendered output. edit_draft edits only draft or pending posts, so a gateway can grant
revision rights without the power to change published posts.
Post Tools
Tool | Description |
| List posts with filtering (status, category, search) |
| Get single post by ID with its saved source (block markup included) and version |
| Search posts by keyword |
| Create new post (supports scheduling) |
| Update existing post; refuses rendered HTML, and a stale |
| Replace text in a post's source without resending the post |
| Same as |
| Delete/trash a post |
| List revisions for a post |
| Get specific revision content |
| List available categories |
| List available tags |
Page Tools
Tool | Description |
| List pages with filtering |
| Get single page by ID with its saved source and version |
| Create new page |
| Update existing page; refuses rendered HTML, and a stale |
| Replace text in a page's source without resending the page |
| Delete/trash a page |
| List page revisions |
Media Tools
Tool | Description |
| List media items |
| Get media item details |
| Upload file from local path |
| Update media metadata |
| Delete media item |
| Get public URL for media |
Comment Tools
Tool | Description |
| List comments with filtering |
| Get single comment |
| Add a comment to a post |
| Update comment content/status |
| Delete a comment |
| Approve, hold, spam, or trash |
Examples
Create a Draft Post
Create a new WordPress post titled "My Technical Article" with the content below. Keep it as a draft.Schedule a Post
Update post ID 123 to publish on December 25, 2024 at 10:00 AM.Upload an Image
Upload this image to WordPress and set the alt text to "Architecture diagram".Find and Moderate Comments
List all comments in "hold" status and approve the legitimate ones.Security
Credential Protection: All credentials stored as
SecretStr, never loggedSSRF Prevention: REST API path hardcoded, cannot be overridden
Input Validation: All inputs validated via Pydantic models
Rate Limiting: Handles WordPress rate limits gracefully
TLS Enforcement: All requests use HTTPS with certificate validation
Size Limits: Response size limited to 10MB to prevent memory issues
Timeout: All requests timeout after 30 seconds
Development
# Install dev dependencies
uv sync --all-extras
# Run tests
uv run pytest
# Run linting
uv run ruff check src tests
# Run type checking
uv run mypy src
# Format code
uv run ruff format src testsLicense
AGPL-3.0-or-later
Credits
Built by crunchtools.com
Available Tools
33 toolswordpress_create_commentWordpress Create CommentC
Create a new comment on a WordPress post.
| Name | Required | Description | Default |
|---|---|---|---|
| post | Yes | Post ID to comment on | |
| parent | No | Parent comment ID for replies | |
| content | Yes | Comment content | |
| author_name | No | Comment author name (for anonymous comments) | |
| author_email | No | Comment author email (for anonymous comments) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not mention authentication requirements, whether created comments are held for moderation (pending vs approved), whether anonymous comments require author_name/author_email, or whether the call is idempotent. 'Create' implies mutation but nothing about side effects is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler — efficient and easy to parse. It is arguably too terse rather than too long, but there is no structural waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and schema coverage is complete, so return values and parameter formats don't need to be restated. However, for a write tool with no annotations, the description omits moderation/auth behavior that an agent would want before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are documented in the schema itself (including `parent` for replies and the anonymous-comment fields). The description adds no parameter-level meaning beyond that, which lands at the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Create) plus resource (comment) plus target (WordPress post) — an agent can tell it apart from wordpress_update_comment or wordpress_get_comment from the name alone. It does not, however, explicitly differentiate itself from the other comment-mutating siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no reference to alternatives such as wordpress_update_comment or the reply mechanism via the `parent` parameter. The agent must infer context entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_create_pageWordpress Create PageC
Create a new WordPress page.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Publication date (ISO 8601) | |
| slug | No | URL slug | |
| title | Yes | Page title | |
| parent | No | Parent page ID | |
| status | No | Page status - publish, draft, pending, private, future (default: draft) | draft |
| content | Yes | Page content (HTML or block format) | |
| excerpt | No | Page excerpt | |
| template | No | Page template file | |
| menu_order | No | Menu order | |
| featured_media | No | Featured image media ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses nothing: no authentication/permission requirements, no note that publishing is possible via the status field, no indication of irreversibility, and no hint of what is returned. For a 10-parameter mutation tool this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no waste, but it is under-specified rather than genuinely concise. It is appropriately sized for what it says, yet it says almost nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, but for a 10-parameter creation tool with zero annotations the description leaves permissions, draft-vs-publish implications, and side effects entirely undocumented. The structured fields cannot fully compensate for that omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter (title, content, status default draft, parent, template, featured_media, etc.) is documented in the schema itself. The description adds no parameter meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a new WordPress page'), which clearly separates it from wordpress_create_post and wordpress_create_comment. It does not, however, say anything to distinguish it from siblings beyond the noun itself, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as wordpress_update_page or wordpress_create_post. The agent must infer everything about context 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_create_postWordpress Create PostC
Create a new WordPress post.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Publication date (ISO 8601 for scheduling, e.g., 2024-12-25T10:00:00) | |
| slug | No | URL slug | |
| tags | No | List of tag IDs | |
| title | Yes | Post title | |
| status | No | Post status - publish, draft, pending, private, future (default: draft) | draft |
| content | Yes | Post content (HTML or block format) | |
| excerpt | No | Post excerpt | |
| categories | No | List of category IDs | |
| post_format | No | Format - standard, aside, gallery, link, image, quote, status, video, audio | |
| featured_media | No | Featured image media ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing. It does not state that the post defaults to draft status, that scheduling is possible via date, whether the call requires authentication, or that it performs a write/mutation. Only the schema hints at the draft default.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of filler, but it is terse to the point of under-specification rather than efficiently concise. Nothing in the sentence is wasted, yet more could have earned its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 10-parameter mutation tool with no annotations and no usage guidance; an output schema exists so return values need no explanation. However, the description says nothing about the draft default, publishing behavior, permissions, or error conditions, leaving the definition inadequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the 10 parameters has a meaningful, self-contained description (status enum values, ISO 8601 date format, tag/category ID lists). The description adds no parameter information beyond this, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a new WordPress post'), which cleanly separates it from wordpress_update_post, wordpress_get_post, and wordpress_create_page. It stops short of explicitly contrasting with the sibling create_page tool, so it is clear but not maximally differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus wordpress_update_post (editing an existing post) or wordpress_create_page. Nothing is said about prerequisites such as authentication or required capability, so an agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_delete_commentWordpress Delete CommentB
Delete or trash a WordPress comment.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | If true, permanently delete. If false, move to trash. | |
| comment_id | Yes | Comment ID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, yet it only states the action. It omits permissions required, whether the operation is reversible in practice, and any side effects on associated data. The schema's force description covers permanent vs trash, but the description adds no safety context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the action and resource, with no redundant or vague wording. It is appropriately sized for a simple delete tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and parameter coverage is complete, so return values and inputs are handled elsewhere. The description nonetheless leaves gaps in usage routing and safety context that matter for a destructive operation with no annotations. It is minimally adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both comment_id and force are fully documented. The description's 'delete or trash' phrasing loosely maps to the force parameter but adds no format or constraint details beyond the schema, matching the baseline of 3 when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (delete/trash) and resource (WordPress comment), making the operation immediately clear. However, it does not explicitly differentiate itself from related siblings such as wordpress_delete_post or wordpress_moderate_comment, so it falls short of the top mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose deletion versus trashing beyond the schema flag, nor when to use this instead of wordpress_moderate_comment. The agent receives no context about prerequisites or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_delete_mediaWordpress Delete MediaC
Delete a WordPress media item.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Must be true for media (media cannot be trashed) | |
| media_id | Yes | Media ID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no statement that deletion is permanent/irreversible, no permission or auth requirements, no side effects. Only the word 'Delete' hints at destructiveness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler or repetition. It is efficient, though its brevity reflects under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is destructive with no annotations and no output-schema relief needed, yet the description says nothing about permanence, permissions, or failure modes. The one genuinely important constraint (media cannot be trashed) is left entirely to the schema, so the description is not complete for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are well documented in the schema itself, including the non-obvious 'force must be true' rule. The description adds no meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (delete a WordPress media item), which is unambiguous and clearly distinct from the delete_post/delete_page/delete_comment siblings by resource name alone. It does not, however, explicitly contrast itself with those siblings or with wordpress_update_media.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of the irreversible nature of deletion. The critical constraint that media cannot be trashed (force must be true) exists only in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_delete_pageWordpress Delete PageC
Delete or trash a WordPress page.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | If true, permanently delete. If false, move to trash. | |
| page_id | Yes | Page ID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden for a destructive operation. It hints at two modes ('delete or trash') but says nothing about irreversibility, required capabilities/permissions, or side effects on revisions and child pages — all of which matter for a permanent delete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words and the action front-loaded. It is arguably too terse for a destructive tool, but there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but for a destructive tool with zero annotation coverage the description omits critical context: permanence warnings, permission requirements, and what happens to associated data. It is not complete enough for an agent to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; both page_id and the force flag (with its default and delete-vs-trash semantics) are fully documented in the schema. The description adds no parameter meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (delete or trash) and resource (WordPress page), which is clear on its own. It does not explicitly distinguish itself from the sibling wordpress_delete_post, though the resource noun does that implicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus wordpress_delete_post or update_page, and no prerequisites stated. The trash-versus-permanent choice is left entirely to the schema's force parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_delete_postWordpress Delete PostC
Delete or trash a WordPress post.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | If true, permanently delete. If false, move to trash. | |
| post_id | Yes | Post ID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Delete or trash' hints that the operation is destructive, but it never states that force=true is irreversible, that trashed posts may be recoverable, what happens to comments/revisions, or what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no wasted words and the action front-loaded. It is efficient, though the extreme brevity is under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple two-parameter mutation with an output schema, and the schema itself carries the destructive/reversible distinction. However, with no annotations, the description leaves the agent without any behavioral context about irreversibility or permissions, so it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both post_id and the force flag are already documented in the schema, including the permanent-delete vs trash distinction. The description's 'delete or trash' phrasing maps to force but adds no meaning beyond the schema, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (delete/trash) and resource (WordPress post), which cleanly separates it from siblings like wordpress_delete_page, wordpress_delete_media, and wordpress_update_post. It does not, however, explicitly contrast with any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor on prerequisites such as required post permissions or whether the post must exist. 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.
wordpress_edit_draftWordpress Edit DraftA
Replace text in a draft or pending WordPress post's source. Refuses any other status.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Post ID of a draft or pending post | |
| new_text | Yes | Replacement text | |
| old_text | Yes | Exact text from get_post's content to replace; must occur exactly once | |
| replace_all | No | Replace every occurrence instead of requiring exactly one | |
| expected_version | No | Refuse the edit unless the post is still at this version (get_post) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden: it discloses the status gate, which is genuinely useful. It says nothing about permissions, whether a revision is created, or whether the edit is reversible, and the exact-once matching rule lives only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and followed by the constraint. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists and params are fully documented, so the remaining gap is behavioral: for an unannotated mutation tool, it would help to know that edits touch live post content and how conflicts are handled. The status restriction covers the most important selector, making this close to sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters including replace_all and expected_version are already documented. The description adds no syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: replace text in a draft or pending post's source. The status restriction helps separate it from wordpress_edit_post / wordpress_update_post, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies when it applies (draft or pending posts only) and adds a hard exclusion ('Refuses any other status'), but gives no positive routing instruction toward the sibling to use for published posts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_edit_pageWordpress Edit PageA
Replace text in a WordPress page's source, without resending the page.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | Page ID | |
| new_text | Yes | Replacement text | |
| old_text | Yes | Exact text from get_page's content to replace; must occur exactly once | |
| replace_all | No | Replace every occurrence instead of requiring exactly one | |
| expected_version | No | Refuse the edit unless the page is still at this version (get_page) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that this is a targeted source-text replacement rather than a whole-document overwrite, but says nothing about permission requirements, reversibility, or what happens when the text is absent or duplicated (the latter only hinted at in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the core mechanism is stated first and the qualifier follows immediately. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the input schema is fully described, so return values and parameter details are covered. For an unannotated mutation tool, however, the description should at least acknowledge that edits are destructive and what failure conditions look like, which it omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page_id, old_text, new_text, replace_all, and expected_version are already well documented, including the exactly-once matching constraint. The description adds no parameter-level meaning beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (replace text in a WordPress page's source) and adds a distinguishing mechanism ('without resending the page') that separates it from full-page siblings like update_page. It stops short of naming the sibling outright, so the distinction is inferred rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without resending the page' implies the tool is for surgical edits rather than full-page rewrites, which hints at when to prefer it over wordpress_update_page. However, it never states the alternative or the condition that selects it, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_edit_postWordpress Edit PostA
Replace text in a WordPress post's source, without resending the post.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Post ID | |
| new_text | Yes | Replacement text | |
| old_text | Yes | Exact text from get_post's content to replace; must occur exactly once | |
| replace_all | No | Replace every occurrence instead of requiring exactly one | |
| expected_version | No | Refuse the edit unless the post is still at this version (get_post) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden, and it does disclose one meaningful trait: this is a targeted patch that does not resend/overwrite the whole post. However, it says nothing about permissions, whether revisions are created, what happens when the replacement target is missing or ambiguous, or how failures surface — all relevant for an unannotated mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with verb and resource, zero filler. Nothing in it is redundant with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema present and 100% parameter description coverage, the description need not explain return values or field semantics. What remains thin is the sibling disambiguation and any note about failure/conflict handling, but for a five-parameter tool whose schema already encodes the tricky constraints, it is close to adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself is unusually rich — old_text documents the exactly-once constraint, replace_all documents the override, and expected_version documents the optimistic-concurrency check. The description adds no parameter meaning beyond that, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb+resource pair: 'Replace text in a WordPress post's source,' which is meaningfully narrower than a whole-post rewrite. The closing phrase 'without resending the post' implicitly distinguishes it from wordpress_update_post and wordpress_edit_draft, but neither sibling is named, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Without resending the post' hints at when this is preferable to a full update, but there is no explicit when-to-use statement, no preconditions, and no named alternative. Usage is implied rather than stated, which leaves the agent guessing between edit_post, update_post, and edit_draft.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_get_commentWordpress Get CommentBRead-only
Get a single WordPress comment by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| comment_id | Yes | Comment ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the safe-read profile, and the output schema covers the return shape, so the description adds essentially no behavioral context beyond what structured fields provide (no error handling for missing IDs, no auth/permission notes). It neither contradicts nor enriches the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with the key scoping word ('single') front-loaded; nothing is padded or wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-resource read with full schema coverage, an output schema, and annotations carrying the safety profile, little more is needed. Only a small routing hint toward list_comments versus get_comment would improve it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single documented parameter, so the schema already defines comment_id. The phrase 'by ID' adds no syntax or format detail, making this the baseline case where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get), resource (WordPress comment), and scope (single, by ID), which separates it from wordpress_list_comments. It does not name siblings or explicitly contrast with wordpress_get_post-style retrieval, but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied: call this when you have a comment ID and need exactly one comment, rather than listing. There is no explicit when-to-use/when-not-to-use guidance or mention of prerequisites, so it stays at the minimum-viable level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_get_mediaWordpress Get MediaBRead-only
Get a single WordPress media item by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| media_id | Yes | Media ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this is a safe, non-mutating read, so the burden on the description is low. The description adds only the scope detail that it returns a single item rather than a collection; it says nothing about failure behavior for an unknown ID or any auth/permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource and key front-loaded and no filler. It is arguably undersized for the surrounding tool set, but every word present earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with a full schema and an output schema already describing the return shape, this is essentially complete. The only shortfall is the absence of any routing hint toward the list/URL siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single parameter (media_id) is documented in the schema, so the schema carries the semantics. The description repeats "by ID" without adding format, range, or sourcing details (e.g., how to obtain a media ID) beyond what is already structured.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get a single WordPress media item") plus the lookup key ("by ID"), so the operation is unambiguous. It does not differentiate from the adjacent siblings wordpress_list_media, wordpress_get_media_url, or wordpress_update_media, so an agent must infer the boundary from the names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "by ID" weakly implies you need a known media_id, but there is no explicit when/when-not guidance and no mention of alternatives such as wordpress_list_media for discovery or wordpress_get_media_url when only a URL is needed. With 27 siblings, that omission matters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_get_media_urlWordpress Get Media UrlBRead-only
Get the public URL for a WordPress media item.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Image size (thumbnail, medium, large, full) | full |
| media_id | Yes | Media ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this as a safe read, so the bar is lower. The description contributes the fact that the returned URL is public-facing, which is modest added context, but says nothing about behavior for private/draft media, permissions, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence that front-loads the purpose with zero filler. It is appropriately sized, though it is so brief that it could have afforded one clause on when to prefer it over adjacent media tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the input schema fully documents both parameters. For a simple two-parameter read tool this is nearly complete; only the missing routing guidance against sibling media tools leaves a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both media_id and size are already documented with a size default of 'full' and enumerated values in the schema. The description adds no format or semantic detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: fetching the public URL of a WordPress media item. This is distinguishable from wordpress_get_media (which returns metadata), though the description never explicitly contrasts the two. Clear and specific, but no sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus wordpress_get_media or wordpress_list_media. Nothing indicates prerequisites (e.g., that the media item must exist or be published) or when a different tool would be preferable. The context is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_get_pageWordpress Get PageBRead-only
Get a single WordPress page by ID with its saved source.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | Page ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the bar is lower. The phrase 'with its saved source' usefully signals the response includes raw stored markup rather than rendered content. It says nothing about behavior for a missing or trashed page ID, though non-destructive reading is fully covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with verb and resource, with the qualifier about saved source appended. Nothing is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema and a readOnlyHint annotation, the description covers the essential scope. The only real gap is what happens with an invalid or non-page ID, which is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single documented page_id parameter, so the schema does the work. The description's 'by ID' merely restates it and adds no format or sourcing detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a single WordPress page by ID') and adds scope ('with its saved source'). The word 'page' distinguishes it from the sibling wordpress_get_post without needing to name it explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no routing to alternatives such as wordpress_list_pages or wordpress_get_post. An agent must infer that this is the point-lookup tool and that an ID is required from elsewhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_get_postWordpress Get PostARead-only
Get a single WordPress post by ID with its saved source.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Post ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this as a safe read, so the description's burden is lighter. It adds the phrase 'with its saved source', which hints at extra returned content but is left unexplained – an agent cannot tell whether that means raw HTML, revision source, or something else.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every phrase earns its place: the verb, the singular scope, the lookup key, and the extra 'saved source' payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-record read with full schema coverage and an output schema that documents return values, the description covers what is needed to call it. The only shortfall is the ambiguous 'saved source' phrase, which leaves the most distinctive part of the return contract unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single post_id parameter is documented in the schema. The description adds no format, range, or semantic detail (e.g. what happens with an invalid or draft ID) beyond what the schema already declares.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a single WordPress post by ID') with a distinguishing scope ('single ... by ID') that separates it from list_posts and search_posts. It does not explicitly name siblings or contrast with wordpress_get_page, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the agent can infer this is the tool for a known post ID. There is no explicit when-to-use guidance, no statement about when to prefer search_posts or list_posts, and no mention of prerequisites or error behavior for missing IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_get_revisionWordpress Get RevisionCRead-only
Get a specific revision of a WordPress post.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Post ID | |
| revision_id | Yes | Revision ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds nothing beyond the name: no note on whether revisions can be restored, what fields come back, or any permission/visibility constraints. With annotations carrying safety, minimal added value warrants a low score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no waste. It is front-loaded and clear, though it is so terse that it forgoes any structuring or routing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. For a simple two-param read tool this is minimally adequate, but the absence of any usage or relationship-to-siblings guidance leaves a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are documented in the schema ('Post ID', 'Revision ID'). The description adds no syntax or semantic detail beyond what the schema provides, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get a specific revision of a WordPress post.' This clearly distinguishes it from wordpress_list_revisions, but it doesn't explicitly name or reference that sibling to sharpen the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is provided. It never states that this requires both a post_id and a revision_id, nor points to wordpress_list_revisions as the way to discover valid revision IDs, nor contrasts with wordpress_get_post.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_get_site_infoWordpress Get Site InfoARead-only
Get WordPress site information.
Returns site title, description, URL, timezone, and other settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this as a safe read operation. The description adds a brief list of returned data, but it does not go beyond annotations or the output schema to describe auth needs, rate limits, or other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the tool's action and followed by return details. No filler or redundancy in the prose itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter, read-only tool with an output schema and readOnlyHint annotation, the description is sufficient. It could be slightly richer by clarifying its relationship to wordpress_test_connection, but it covers the core operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so parameter semantics carry no burden. The empty schema is consistent with the description, and the baseline for zero-param tools is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get WordPress site information,' and lists returned fields. It is clearly distinguishable from most siblings, though it does not explicitly contrast itself with wordpress_test_connection or other read tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no alternatives named. The tool's purpose is implied by 'Get site information,' but an agent receives no explicit routing advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_list_categoriesWordpress List CategoriesCRead-only
List available WordPress categories.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| search | No | Search categories by name | |
| per_page | No | Results per page (max 100) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the safe-read profile, and the description adds nothing on top of it — no note about pagination defaults, result ordering, or whether the list is complete or filtered. It neither contradicts nor enriches the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler and the purpose front-loaded. It is efficient, though it is arguably too terse to earn a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and annotations cover safety, leaving the description merely adequate. It is minimally viable for a simple read-only list tool but adds no disambiguation against the many other list_* siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page, search, and per_page are already fully documented in the schema. The description adds no format or behavior detail beyond that, which is the baseline-3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list + WordPress categories), which distinguishes it from siblings like wordpress_list_tags and wordpress_list_posts. It does not explicitly name an alternative or scope, but the resource noun alone is discriminating enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use context, no mention of pagination, and no guidance on choosing this over wordpress_list_tags or wordpress_search_posts. Nothing beyond the bare purpose is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_list_commentsWordpress List CommentsCRead-only
List WordPress comments with filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| post | No | Filter by post ID | |
| order | No | Sort direction (asc, desc) | desc |
| search | No | Search comments by content | |
| status | No | Filter by status (approved, hold, spam, trash) | |
| orderby | No | Sort by field (date, id) | date |
| per_page | No | Results per page, max 100 (default: 10) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe-read profile is covered structurally. The description adds only the vague phrase 'with filtering' and discloses nothing beyond that, such as pagination limits or default result ordering. Little value beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It is efficient, though bordering on under-specification rather than genuinely informative brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Seven parameters and a read-only annotation are fully covered by schema and annotations, and an output schema exists so return values need not be explained. The description is minimally adequate but leaves filtering behavior and result semantics entirely to structured fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with seven well-documented parameters (page, post, status, search, orderby, etc.). Per the baseline rule, the schema carries the parameter burden and the description's generic 'filtering' adds no syntax or format detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (WordPress comments) with a scope qualifier (filtering). It is distinguishable from write-oriented siblings like wordpress_create_comment or wordpress_delete_comment, but it does not differentiate itself from wordpress_get_comment or the other list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says nothing about when to use this tool versus alternatives such as wordpress_get_comment or wordpress_search_posts-like siblings. No prerequisites, no context, no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_list_mediaWordpress List MediaCRead-only
List WordPress media items with filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| order | No | Sort direction (asc, desc) | desc |
| search | No | Search media by keyword | |
| orderby | No | Sort by field (date, title, id) | date |
| per_page | No | Results per page, max 100 (default: 10) | |
| mime_type | No | Filter by MIME type (e.g., image/jpeg) | |
| media_type | No | Filter by type (image, video, audio, application) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already tells the agent this is a safe read, so the description's burden is light, but it still adds essentially nothing beyond that — no note on pagination behavior, default ordering, or rate limits. Only "with filtering" hints at behavior, which the schema already conveys via mime_type/media_type/search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with no filler. It is efficient, though the brevity comes at the cost of useful detail rather than being tight because everything necessary was already said.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full parameter documentation, return values and inputs need no explanation in the description. What is missing is routing context — when to use this vs. wordpress_get_media or wordpress_search_posts equivalents — leaving the definition only minimally complete for its role in a 29-tool set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters (page, per_page, order, orderby, search, mime_type, media_type) are fully self-documented. The description adds no extra semantics such as valid mime_type formats or ordering defaults, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ("List WordPress media items"), which cleanly separates it from wordpress_get_media, wordpress_upload_media and the other media siblings. However, it never clarifies scope (all media vs. filtered subsets) or why one would pick this over its siblings, so it stops short of 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"with filtering" gestures at the use case but gives no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as wordpress_get_media for a single item. An agent must infer everything from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_list_page_revisionsWordpress List Page RevisionsBRead-only
List revisions for a WordPress page.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | Page ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read operation, so the behavioral burden is lighter. The description adds nothing beyond that: no pagination behavior, no return-shape context, no ordering of revisions, and no note on permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero waste, front-loading the verb and resource. Nothing is bloated or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with an output schema and 100% parameter coverage, the description is minimally adequate. It omits any routing context against the similarly named wordpress_list_revisions, which is the main gap an agent would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single page_id parameter is described as 'Page ID'. The description adds no meaning beyond the schema (e.g., where to obtain page_id or what happens with an invalid one), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (revisions for a WordPress page), which is clear. However, it doesn't differentiate from the sibling wordpress_list_revisions, which presumably lists revisions by other target types, so the agent must infer the distinction from 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus wordpress_list_revisions or wordpress_get_revision. No mention of prerequisites or alternatives. Usage is implied only by the tool name and one-line purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_list_pagesWordpress List PagesCRead-only
List WordPress pages with filtering and pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| order | No | Sort direction (asc, desc) | desc |
| parent | No | Filter by parent page ID | |
| search | No | Search pages by keyword | |
| status | No | Filter by status (publish, draft, pending, private, future) | |
| orderby | No | Sort by field (date, title, id, modified, menu_order) | date |
| per_page | No | Results per page, max 100 (default: 10) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the output schema covers returns, so the bar is lower. The description adds only 'filtering and pagination,' which restates the schema rather than disclosing anything new (e.g., default status scope, whether drafts are included, pagination limits).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. It is compact, though the brevity edges into under-specification rather than optimal density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, full param coverage, and a readOnly annotation, much of the burden is carried structurally, so the thin description is survivable. What's missing is routing relative to the overlapping list/search siblings, which the structured fields cannot supply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters are already documented with defaults and value hints in the schema. The description mentions 'filtering' generically but adds no syntax or semantics beyond the schema, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List WordPress pages') with the added scope of filtering and pagination, so the agent knows it's a read/listing operation. However, it never distinguishes itself from siblings like wordpress_list_posts or wordpress_search_posts, which could plausibly cover the same filtering role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative routing is provided. The agent is left to infer whether filtered listing should go here or to wordpress_search_posts, even though that sibling exists and overlaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_list_postsWordpress List PostsCRead-only
List WordPress posts with filtering and pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| tags | No | Filter by tag IDs | |
| order | No | Sort direction (asc, desc) | desc |
| search | No | Search posts by keyword | |
| status | No | Filter by status (publish, draft, pending, private, future) | |
| orderby | No | Sort by field (date, title, id, modified) | date |
| per_page | No | Results per page, max 100 (default: 10) | |
| categories | No | Filter by category IDs |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. Beyond that, the description discloses nothing behavioral: no note on the 100-item per_page ceiling, default page size, authentication requirements, or what the paginated response contains. It effectively restates the schema's filtering/pagination surface.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no filler, and it leads with the verb and resource. It is efficient, though the brevity comes at the cost of the routing and behavioral detail noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover the read-only nature. However, for a tool in a dense namespace with a near-duplicate search sibling, the absence of any disambiguation or pagination/limit context leaves a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters (page, per_page, order, orderby, search, status, tags, categories) are already documented in the schema. The description's mention of 'filtering and pagination' adds no syntax, default, or constraint detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (WordPress posts) plus the capabilities it covers (filtering, pagination). It is clear on its own, but it does not distinguish itself from the close sibling wordpress_search_posts, which an agent could reasonably confuse with keyword-based listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. With siblings like wordpress_search_posts, wordpress_get_post, and wordpress_list_pages in the same namespace, the description should say when listing is preferred over searching or fetching a single post, and it does not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_list_revisionsWordpress List RevisionsBRead-only
List revisions for a WordPress post.
| Name | Required | Description | Default |
|---|---|---|---|
| post_id | Yes | Post ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds nothing beyond confirming it lists revisions, which the name already implies. No pagination, ordering, or output details mentioned, though an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Appropriately sized for a simple one-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given readOnly annotation and a full output schema, the safety and return shape are covered. The main gap is routing guidance relative to wordpress_get_revision / wordpress_list_page_revisions, which the description doesn't provide.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (post_id documented). The description adds no meaning beyond the schema's 'Post ID' description. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb (List) and resource (revisions) scoped to a Wordpress post. Distinguishable from siblings like wordpress_get_revision (singular) and wordpress_list_page_revisions (pages), though it doesn't explicitly state that distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus wordpress_get_revision or wordpress_list_page_revisions. The agent must infer from naming alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_list_tagsWordpress List TagsCRead-only
List available WordPress tags.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| search | No | Search tags by name | |
| per_page | No | Results per page (max 100) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds nothing beyond that — no pagination behavior, no note on what "available" means (published vs. all), and no hint about filtering, so it contributes essentially no 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler and the verb-resource pairing front-loaded. It is efficient, though its brevity borders on under-specification rather than accomplished concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the fully-documented schema covers the parameters. However, for a paginated list tool the description omits any mention of paging or filtering behavior, leaving it only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: page, search, and per_page are each documented with type, default, and constraint (max 100). With the schema doing the heavy lifting, the baseline of 3 applies and the description adds no parameter meaning on top.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"List available WordPress tags" names a specific verb (list) and resource (WordPress tags), so the operation is unambiguous. It does not differentiate itself from the similar sibling wordpress_list_categories, but the resource noun is explicit enough for selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no mention of the sibling list_categories and how this differs, and no prerequisites or exclusions. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_moderate_commentWordpress Moderate CommentC
Moderate a WordPress comment by changing its status.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Moderation action (approve, hold, spam, trash) | |
| comment_id | Yes | Comment ID to moderate |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether trashing/spamming is reversible, what permissions are required, or what side effects (notifications, visibility changes) occur — significant omissions for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient, front-loaded sentence with no wasted words. It is appropriately sized, though the brevity comes at the cost of the missing guidance noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the schema covers both parameters. However, with no annotations and no usage guidance for a mutation tool that overlaps with update/delete siblings, the definition is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the enumerated action values, so the schema already documents both parameters fully. The description adds no syntax, format, or semantic detail beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Moderate a WordPress comment') and hints at the mechanism ('changing its status'). However, it does not distinguish this tool from the closely related siblings wordpress_update_comment and wordpress_delete_comment, leaving the agent to guess whether moderation is a distinct operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use moderation versus update_comment or delete_comment, nor any statement of prerequisites or exclusions. The agent is left to infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_search_postsWordpress Search PostsARead-only
Search WordPress posts by keyword in title and content.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default: 1) | |
| keyword | Yes | Search keyword | |
| per_page | No | Results per page (default: 10) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered and the description need not restate it. The phrase 'in title and content' adds real behavioral context by disclosing which fields are matched, but nothing is said about pagination or result ordering beyond what the schema implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every clause ('by keyword', 'in title and content') carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the schema fully documents the three parameters. The description covers the essential search semantics; only the absence of any sibling routing keeps it short of complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so keyword, page, and per_page are all documented in the schema; the baseline is 3. The description's only addition is clarifying that the keyword matches title and content, which is modest value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Search') and resource ('WordPress posts') plus the scope of the search ('in title and content'). This distinguishes it functionally from wordpress_list_posts and wordpress_get_post, though it never names a sibling to make the boundary explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The verb 'search' implies when to reach for it versus listing or fetching, but there is no explicit when-to-use/when-not statement and no reference to wordpress_list_posts as the alternative for unfiltered enumeration. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_test_connectionWordpress Test ConnectionARead-only
Test connection to WordPress REST API.
Verifies API credentials and returns connection status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the non-mutating nature is covered. The description adds useful context that the call verifies credentials and returns a connection status, but says nothing about failure modes (e.g. whether auth errors are returned as a status or thrown) or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The second sentence slightly overlaps the first ('Test connection' vs 'returns connection status') but still adds the credential-verification angle, so it largely earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and an output schema present, the description need not explain return values, and it is complete for a simple connectivity probe. The only shortfall is the absence of any usage context for when to invoke it relative to the CRUD siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the baseline of 4 applies. There is nothing for the description to disambiguate, and it correctly does not invent parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Test connection') and resource ('WordPress REST API'), and the second sentence clarifies the check is about credentials and connection status. It is implicitly distinguishable from every sibling, none of which test connectivity, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'verifies API credentials' suggests it should be called when validating configuration before other operations. There is no explicit when-to-use statement, no prerequisites, and no named alternatives, leaving the agent to infer the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_update_commentWordpress Update CommentC
Update an existing WordPress comment.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | New status (approved, hold, spam, trash) | |
| content | No | New comment content | |
| comment_id | Yes | Comment ID to update |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does not meet it. It says 'update' but never discloses that this is a mutation, what permissions are required, or whether fields left null are preserved or cleared — a meaningful ambiguity given all three parameters are nullable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded verb+resource, zero filler. It is terse rather than bloated; the shortfall is under-specification, not verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the schema fully documents the parameters. But for a no-annotation mutation tool sitting beside wordpress_moderate_comment and wordpress_delete_comment, the description omits the safety and scope context an agent needs to choose correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter carries its own description (including the status vocabulary), so the schema does the heavy lifting. The description adds nothing beyond the schema, which lands at the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update an existing WordPress comment'), which is unambiguous on its own. However, it does nothing to distinguish itself from siblings like wordpress_moderate_comment, which also alters comment state, or wordpress_delete_comment, so the agent gets no differentiation signal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of the competing wordpress_moderate_comment tool, which overlaps with status changes (approved/hold/spam/trash). The agent must infer from the schema alone which tool handles moderation vs. editing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_update_mediaWordpress Update MediaC
Update WordPress media item metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New title | |
| caption | No | New caption | |
| alt_text | No | New alt text | |
| media_id | Yes | Media ID to update | |
| description | No | New description |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses almost nothing. It doesn't say whether this requires auth, whether changes are reversible, whether metadata is replaced or merged, or what happens to unspecified fields. The only behavioral signal is the word 'Update' implying mutation, and no output information is given despite a mutation tool needing to describe its effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no waste. It could be slightly more informative, but it is appropriately sized and not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with no annotations and no output schema details in the description (though a schema exists), the description is far too thin. It omits usage context, behavioral traits, and doesn't compensate for the lack of annotations. An agent would need to infer most operational details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters (title, caption, alt_text, media_id, description) with their meanings. The description adds no parameter information beyond what the schema provides. Baseline 3 for high coverage is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) and resource (WordPress media item metadata), which is clear enough. However, it does not differentiate from siblings like wordpress_update_post or wordpress_update_comment beyond the resource name; there's no mention of what distinguishes metadata updates from e.g. replacing the media file itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites, and no mention of alternatives. It doesn't say when to use this vs. wordpress_upload_media (re-upload) or wordpress_get_media. No exclusions or conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_update_pageWordpress Update PageA
Update an existing WordPress page. To change part of the content, use edit_page.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | New publication date | |
| slug | No | New slug | |
| title | No | New title | |
| parent | No | New parent page ID | |
| status | No | New status | |
| content | No | New content | |
| excerpt | No | New excerpt | |
| page_id | Yes | Page ID to update | |
| template | No | New template | |
| menu_order | No | New menu order | |
| featured_media | No | New featured image ID | |
| expected_version | No | Refuse the write unless the page is still at this version (get_page) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, yet it discloses almost no behavior: whether omitted/null fields leave values unchanged or clear them, whether content is replaced wholesale, what permissions are needed, or that writes can be rejected via expected_version. Only the edit_page routing hint adds 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and ending with the disambiguation rule. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the input schema is fully documented, but for a 12-parameter mutation with no annotations the description should at least state partial-vs-full update semantics and the expected_version guard, which it leaves entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all 12 parameters (including page_id and expected_version) are documented in the schema, so the baseline of 3 applies. The description adds no semantics beyond the schema, notably nothing about null/omitted field handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update an existing WordPress page') and explicitly contrasts itself with the sibling wordpress_edit_page. An agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear routing rule: for partial content changes, use edit_page. It does not cover the converse (when update_page beats edit_page, e.g. multi-field changes), nor does it point to get_page/expected_version for the concurrency path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_update_postWordpress Update PostB
Update an existing WordPress post. To change part of the content, use edit_post.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | New publication date | |
| slug | No | New slug | |
| tags | No | New tag IDs | |
| title | No | New title | |
| status | No | New status | |
| content | No | New content | |
| excerpt | No | New excerpt | |
| post_id | Yes | Post ID to update | |
| categories | No | New category IDs | |
| post_format | No | New post format | |
| featured_media | No | New featured image ID | |
| expected_version | No | Refuse the write unless the post is still at this version (get_post) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and mostly fails. It never states whether omitted fields are left untouched or cleared, that this is an irreversible write requiring edit permissions, or what role expected_version plays in conflict handling (the schema mentions it, but the description does not surface the concurrency behavior).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with purpose and zero padding. But the brevity is under-specification rather than economy: for a 12-parameter mutation tool, the sentence budget is too small to be genuinely concise-and-complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with 12 optional parameters, no annotations, and no explanation of partial-update or null-default semantics, the description leaves the agent without what it needs to call safely. An output schema exists so return values need not be described, but the write-behavior gaps are significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 12 parameters is already documented in the schema, which sets the baseline at 3. The description adds no additional meaning about partial-update semantics, null handling, or the expected_version precondition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update an existing WordPress post') that is immediately understandable. It partially differentiates from the sibling wordpress_edit_post via the second sentence, though the boundary between them remains fuzzy since both appear to modify posts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
One explicit routing rule is given ('To change part of the content, use edit_post'), which implies update_post is a wholesale replacement. However, no guidance is offered for the many other overlapping siblings (wordpress_edit_draft, wordpress_update_page, wordpress_create_post) or for when a post should not be updated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wordpress_upload_mediaWordpress Upload MediaA
Upload a media file to WordPress from a local file path.
The file is read directly from disk, avoiding large base64 payloads over the MCP protocol. Provide an absolute path to the file.
CONTAINER NOTE: When running as a container, the file path refers to the container filesystem, not the host. Files must be placed in ~/.local/share/mcp-wordpress/uploads/ on the host (mounted to /tmp/mcp-uploads/ inside the container) to be accessible.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Media title | |
| caption | No | Media caption | |
| alt_text | No | Alt text for accessibility | |
| file_path | Yes | Absolute path to the file (e.g., /tmp/mcp-uploads/image.png) | |
| description | No | Media description |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose genuinely non-obvious behavior: the file is read directly from disk instead of via base64 payloads, and under containerization the path resolves to the container filesystem with a specific host mount point. It omits auth/permission requirements and any size or duplicate-filename behavior, so it is not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the rationale, then a clearly labeled CONTAINER NOTE. Slightly redundant, since "Provide an absolute path to the file" restates the first and third sentences, but the total length is proportionate to the caveat being conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the tricky parameter-resolution case that schema text alone cannot. Auth requirements and limits are unstated, which is the main remaining gap for a write tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: it explains how file_path resolves under containerization and maps the host upload directory to /tmp/mcp-uploads/ inside the container, which is essential for passing that parameter correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Upload a media file to WordPress") plus the input modality (from a local file path). This cleanly separates it from the sibling read/manage tools (wordpress_list_media, wordpress_get_media, wordpress_update_media, wordpress_get_media_url).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for how the tool should be invoked (provide an absolute local path; the file is read from disk rather than passed as base64) and warns about the container-specific case. It does not name an alternative tool or state when not to use this one, which is the only gap.
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.
5 tool updates
v0.8.0- Added
wordpress_edit_draft - Added
wordpress_edit_page - Added
wordpress_edit_post - Changed
wordpress_update_page1 field changed- added
Input schema / properties / expected_versionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Refuse the write unless the page is still at this version (get_page)" +}
- Changed
wordpress_update_post1 field changed- added
Input schema / properties / expected_versionAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Refuse the write unless the post is still at this version (get_post)" +}
30 tool updates
v0.6.1- Changed
wordpress_create_comment7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / author_email / descriptionAdded value: +"Comment author email (for anonymous comments)" - added
Input schema / properties / author_name / descriptionAdded value: +"Comment author name (for anonymous comments)" - added
Input schema / properties / content / descriptionAdded value: +"Comment content" - added
Input schema / properties / parent / descriptionAdded value: +"Parent comment ID for replies" - added
Input schema / properties / post / descriptionAdded value: +"Post ID to comment on" - added
Input schema / properties / post / minimumAdded value: +1
- Changed
wordpress_create_page11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / content / descriptionAdded value: +"Page content (HTML or block format)" - added
Input schema / properties / date / descriptionAdded value: +"Publication date (ISO 8601)" - added
Input schema / properties / excerpt / descriptionAdded value: +"Page excerpt" - added
Input schema / properties / featured_media / descriptionAdded value: +"Featured image media ID" - added
Input schema / properties / menu_order / descriptionAdded value: +"Menu order" - added
Input schema / properties / parent / descriptionAdded value: +"Parent page ID" - added
Input schema / properties / slug / descriptionAdded value: +"URL slug" - added
Input schema / properties / status / descriptionAdded value: +"Page status - publish, draft, pending, private, future (default: draft)" - added
Input schema / properties / template / descriptionAdded value: +"Page template file" - added
Input schema / properties / title / descriptionAdded value: +"Page title"
- Changed
wordpress_create_post11 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / categories / descriptionAdded value: +"List of category IDs" - added
Input schema / properties / content / descriptionAdded value: +"Post content (HTML or block format)" - added
Input schema / properties / date / descriptionAdded value: +"Publication date (ISO 8601 for scheduling, e.g., 2024-12-25T10:00:00)" - added
Input schema / properties / excerpt / descriptionAdded value: +"Post excerpt" - added
Input schema / properties / featured_media / descriptionAdded value: +"Featured image media ID" - added
Input schema / properties / post_format / descriptionAdded value: +"Format - standard, aside, gallery, link, image, quote, status, video, audio" - added
Input schema / properties / slug / descriptionAdded value: +"URL slug" - added
Input schema / properties / status / descriptionAdded value: +"Post status - publish, draft, pending, private, future (default: draft)" - added
Input schema / properties / tags / descriptionAdded value: +"List of tag IDs" - added
Input schema / properties / title / descriptionAdded value: +"Post title"
- Changed
wordpress_delete_comment4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / comment_id / descriptionAdded value: +"Comment ID to delete" - added
Input schema / properties / comment_id / minimumAdded value: +1 - added
Input schema / properties / force / descriptionAdded value: +"If true, permanently delete. If false, move to trash."
- Changed
wordpress_delete_media4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / force / descriptionAdded value: +"Must be true for media (media cannot be trashed)" - added
Input schema / properties / media_id / descriptionAdded value: +"Media ID to delete" - added
Input schema / properties / media_id / minimumAdded value: +1
- Changed
wordpress_delete_page4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / force / descriptionAdded value: +"If true, permanently delete. If false, move to trash." - added
Input schema / properties / page_id / descriptionAdded value: +"Page ID to delete" - added
Input schema / properties / page_id / minimumAdded value: +1
- Changed
wordpress_delete_post4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / force / descriptionAdded value: +"If true, permanently delete. If false, move to trash." - added
Input schema / properties / post_id / descriptionAdded value: +"Post ID to delete" - added
Input schema / properties / post_id / minimumAdded value: +1
- Changed
wordpress_get_comment3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / comment_id / descriptionAdded value: +"Comment ID" - added
Input schema / properties / comment_id / minimumAdded value: +1
- Changed
wordpress_get_media3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / media_id / descriptionAdded value: +"Media ID" - added
Input schema / properties / media_id / minimumAdded value: +1
- Changed
wordpress_get_media_url4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / media_id / descriptionAdded value: +"Media ID" - added
Input schema / properties / media_id / minimumAdded value: +1 - added
Input schema / properties / size / descriptionAdded value: +"Image size (thumbnail, medium, large, full)"
- Changed
wordpress_get_page3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / page_id / descriptionAdded value: +"Page ID" - added
Input schema / properties / page_id / minimumAdded value: +1
- Changed
wordpress_get_post3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / post_id / descriptionAdded value: +"Post ID" - added
Input schema / properties / post_id / minimumAdded value: +1
- Changed
wordpress_get_revision5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / post_id / descriptionAdded value: +"Post ID" - added
Input schema / properties / post_id / minimumAdded value: +1 - added
Input schema / properties / revision_id / descriptionAdded value: +"Revision ID" - added
Input schema / properties / revision_id / minimumAdded value: +1
- Changed
wordpress_get_site_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
wordpress_list_categories4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / page / descriptionAdded value: +"Page number" - added
Input schema / properties / per_page / descriptionAdded value: +"Results per page (max 100)" - added
Input schema / properties / search / descriptionAdded value: +"Search categories by name"
- Changed
wordpress_list_comments9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / order / descriptionAdded value: +"Sort direction (asc, desc)" - added
Input schema / properties / orderby / descriptionAdded value: +"Sort by field (date, id)" - added
Input schema / properties / page / descriptionAdded value: +"Page number (default: 1)" - added
Input schema / properties / per_page / descriptionAdded value: +"Results per page, max 100 (default: 10)" - changed
Input schema / properties / post / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - added
Input schema / properties / post / descriptionAdded value: +"Filter by post ID" - added
Input schema / properties / search / descriptionAdded value: +"Search comments by content" - added
Input schema / properties / status / descriptionAdded value: +"Filter by status (approved, hold, spam, trash)"
- Changed
wordpress_list_media8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / media_type / descriptionAdded value: +"Filter by type (image, video, audio, application)" - added
Input schema / properties / mime_type / descriptionAdded value: +"Filter by MIME type (e.g., image/jpeg)" - added
Input schema / properties / order / descriptionAdded value: +"Sort direction (asc, desc)" - added
Input schema / properties / orderby / descriptionAdded value: +"Sort by field (date, title, id)" - added
Input schema / properties / page / descriptionAdded value: +"Page number (default: 1)" - added
Input schema / properties / per_page / descriptionAdded value: +"Results per page, max 100 (default: 10)" - added
Input schema / properties / search / descriptionAdded value: +"Search media by keyword"
- Changed
wordpress_list_page_revisions3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / page_id / descriptionAdded value: +"Page ID" - added
Input schema / properties / page_id / minimumAdded value: +1
- Changed
wordpress_list_pages8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / order / descriptionAdded value: +"Sort direction (asc, desc)" - added
Input schema / properties / orderby / descriptionAdded value: +"Sort by field (date, title, id, modified, menu_order)" - added
Input schema / properties / page / descriptionAdded value: +"Page number (default: 1)" - added
Input schema / properties / parent / descriptionAdded value: +"Filter by parent page ID" - added
Input schema / properties / per_page / descriptionAdded value: +"Results per page, max 100 (default: 10)" - added
Input schema / properties / search / descriptionAdded value: +"Search pages by keyword" - added
Input schema / properties / status / descriptionAdded value: +"Filter by status (publish, draft, pending, private, future)"
- Changed
wordpress_list_posts9 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / categories / descriptionAdded value: +"Filter by category IDs" - added
Input schema / properties / order / descriptionAdded value: +"Sort direction (asc, desc)" - added
Input schema / properties / orderby / descriptionAdded value: +"Sort by field (date, title, id, modified)" - added
Input schema / properties / page / descriptionAdded value: +"Page number (default: 1)" - added
Input schema / properties / per_page / descriptionAdded value: +"Results per page, max 100 (default: 10)" - added
Input schema / properties / search / descriptionAdded value: +"Search posts by keyword" - added
Input schema / properties / status / descriptionAdded value: +"Filter by status (publish, draft, pending, private, future)" - added
Input schema / properties / tags / descriptionAdded value: +"Filter by tag IDs"
- Changed
wordpress_list_revisions3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / post_id / descriptionAdded value: +"Post ID" - added
Input schema / properties / post_id / minimumAdded value: +1
- Changed
wordpress_list_tags4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / page / descriptionAdded value: +"Page number" - added
Input schema / properties / per_page / descriptionAdded value: +"Results per page (max 100)" - added
Input schema / properties / search / descriptionAdded value: +"Search tags by name"
- Changed
wordpress_moderate_comment4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / action / descriptionAdded value: +"Moderation action (approve, hold, spam, trash)" - added
Input schema / properties / comment_id / descriptionAdded value: +"Comment ID to moderate" - added
Input schema / properties / comment_id / minimumAdded value: +1
- Changed
wordpress_search_posts4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / keyword / descriptionAdded value: +"Search keyword" - added
Input schema / properties / page / descriptionAdded value: +"Page number (default: 1)" - added
Input schema / properties / per_page / descriptionAdded value: +"Results per page (default: 10)"
- Changed
wordpress_test_connection1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
wordpress_update_comment5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / comment_id / descriptionAdded value: +"Comment ID to update" - added
Input schema / properties / comment_id / minimumAdded value: +1 - added
Input schema / properties / content / descriptionAdded value: +"New comment content" - added
Input schema / properties / status / descriptionAdded value: +"New status (approved, hold, spam, trash)"
- Changed
wordpress_update_media7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / alt_text / descriptionAdded value: +"New alt text" - added
Input schema / properties / caption / descriptionAdded value: +"New caption" - added
Input schema / properties / description / descriptionAdded value: +"New description" - added
Input schema / properties / media_id / descriptionAdded value: +"Media ID to update" - added
Input schema / properties / media_id / minimumAdded value: +1 - added
Input schema / properties / title / descriptionAdded value: +"New title"
- Changed
wordpress_update_page13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / content / descriptionAdded value: +"New content" - added
Input schema / properties / date / descriptionAdded value: +"New publication date" - added
Input schema / properties / excerpt / descriptionAdded value: +"New excerpt" - added
Input schema / properties / featured_media / descriptionAdded value: +"New featured image ID" - added
Input schema / properties / menu_order / descriptionAdded value: +"New menu order" - added
Input schema / properties / page_id / descriptionAdded value: +"Page ID to update" - added
Input schema / properties / page_id / minimumAdded value: +1 - added
Input schema / properties / parent / descriptionAdded value: +"New parent page ID" - added
Input schema / properties / slug / descriptionAdded value: +"New slug" - added
Input schema / properties / status / descriptionAdded value: +"New status" - added
Input schema / properties / template / descriptionAdded value: +"New template" - added
Input schema / properties / title / descriptionAdded value: +"New title"
- Changed
wordpress_update_post13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / categories / descriptionAdded value: +"New category IDs" - added
Input schema / properties / content / descriptionAdded value: +"New content" - added
Input schema / properties / date / descriptionAdded value: +"New publication date" - added
Input schema / properties / excerpt / descriptionAdded value: +"New excerpt" - added
Input schema / properties / featured_media / descriptionAdded value: +"New featured image ID" - added
Input schema / properties / post_format / descriptionAdded value: +"New post format" - added
Input schema / properties / post_id / descriptionAdded value: +"Post ID to update" - added
Input schema / properties / post_id / minimumAdded value: +1 - added
Input schema / properties / slug / descriptionAdded value: +"New slug" - added
Input schema / properties / status / descriptionAdded value: +"New status" - added
Input schema / properties / tags / descriptionAdded value: +"New tag IDs" - added
Input schema / properties / title / descriptionAdded value: +"New title"
- Changed
wordpress_upload_media6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / alt_text / descriptionAdded value: +"Alt text for accessibility" - added
Input schema / properties / caption / descriptionAdded value: +"Media caption" - added
Input schema / properties / description / descriptionAdded value: +"Media description" - added
Input schema / properties / file_path / descriptionAdded value: +"Absolute path to the file (e.g., /tmp/mcp-uploads/image.png)" - added
Input schema / properties / title / descriptionAdded value: +"Media title"
30 tool updates
v0.5.0- First observed
wordpress_create_comment - First observed
wordpress_create_page - First observed
wordpress_create_post - First observed
wordpress_delete_comment - First observed
wordpress_delete_media - First observed
wordpress_delete_page - First observed
wordpress_delete_post - First observed
wordpress_get_comment - First observed
wordpress_get_media - First observed
wordpress_get_media_url - First observed
wordpress_get_page - First observed
wordpress_get_post - First observed
wordpress_get_revision - First observed
wordpress_get_site_info - First observed
wordpress_list_categories - First observed
wordpress_list_comments - First observed
wordpress_list_media - First observed
wordpress_list_page_revisions - First observed
wordpress_list_pages - First observed
wordpress_list_posts - First observed
wordpress_list_revisions - First observed
wordpress_list_tags - First observed
wordpress_moderate_comment - First observed
wordpress_search_posts - First observed
wordpress_test_connection - First observed
wordpress_update_comment - First observed
wordpress_update_media - First observed
wordpress_update_page - First observed
wordpress_update_post - First observed
wordpress_upload_media
TDQS
Scored across 33 tools
Most tools map cleanly to a distinct resource and action, especially across posts, pages, media, and comments. The main ambiguity is among update_post/edit_post/edit_draft and update_page/edit_page, which all modify content, though the descriptions distinguish full updates from source-text replacement.
All tools consistently use the wordpress_ prefix followed by snake_case verb_noun naming, such as list_posts, create_page, delete_comment, and moderate_comment. Names are predictable and readable throughout the set.
At 33 tools, the surface is heavy for a single MCP server and exceeds the rubric's 25+ threshold for too many tools. The broad WordPress content domain justifies many operations, but the set could likely consolidate overlapping post/page edit variants and media helpers.
Core content lifecycle coverage is strong for posts, pages, media, and comments, including revisions and comment moderation. Remaining gaps include no get-page-revision operation, read-only categories/tags, and no broader WordPress admin tools such as users or settings.
Maintenance
Related MCP Connectors
WordPress MCP server: publish posts, AI images, SEO and full site management, self-hosted
Security-first WordPress MCP server. 129 tools for Claude, ChatGPT, Gemini. Free on wp.org.
WordPress MCP server: generate SEO posts, AI images, autoblog & WooCommerce on your self-hosted site
Free MCP server for WordPress: Claude and ChatGPT connect with OAuth. No account, cap or API key.
Related MCP Servers
- AlicenseCqualityDmaintenanceA lightweight MCP server that connects to WordPress via REST API, enabling content management (posts, pages, categories, etc.) and site configuration through natural language commands.49Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server for WordPress content management that provides a secure interface for AI assistants to interact with WordPress sites, enabling content creation, editing, and media management without destructive operations.MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that enables safe reconnaissance, mutation, and verification of WordPress sites through guarded, typed verbs with dry-run previews and change-packet audit records.MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that bridges AI assistants to WordPress, enabling natural-language management of posts, pages, media, comments, users, plugins, and settings across multiple sites simultaneously.1-