
List WordPress reusable blocks with filtering by status and search. Use page/per_page for pagination.
Get a single WordPress reusable block by ID. Returns block title, content, and metadata.
Create a new WordPress reusable block with title, content (HTML/block markup), and status.
Update an existing WordPress reusable block. Only provided fields will be changed. Use list_blocks to find valid IDs.
Delete a WordPress reusable block. By default moves to trash. Set force=true to permanently delete.
List WordPress categories with filtering and search. Use page/per_page for pagination.
Get a single WordPress category by ID. Returns name, slug, description, parent, and post count.
Create a new WordPress category with name, description, slug, and optional parent category.
Update an existing WordPress category. Only provided fields will be changed. Use list_categories to find valid IDs. On WordPress.com, category IDs are global and may change after update — always re-fetch after updating.
Delete a WordPress category. Categories require force=true to delete (set by default). On WordPress.com, category IDs are global and may differ from creation IDs — use list_categories to find valid IDs before deleting.
List WordPress comments with filtering by post, status, and search. Use page/per_page for pagination.
Get a single WordPress comment by ID. Returns comment content, author info, and metadata.
Create a new comment on a WordPress post. Requires post ID and content. Use list_posts to find valid post IDs.
Update an existing WordPress comment. Only provided fields will be changed. Use list_comments to find valid IDs.
Delete a WordPress comment. By default moves to trash. Set force=true to permanently delete.
List WordPress media items with filtering by type and search. Use page/per_page for pagination.
Get a single WordPress media item by ID. Returns file details, URLs, alt text, and metadata.
Update a WordPress media item's title, alt text, caption, or description. Use list_media to find valid IDs.
Permanently delete a WordPress media item. Media deletion requires force=true (set by default).
List WordPress pages with filtering by status, author, and parent. Use page/per_page for pagination.
Get a single WordPress page by ID. Returns full page content including title, body, and metadata.
Create a new WordPress page with title, content, status, and parent. Defaults to draft status.
Update an existing WordPress page. Only provided fields will be changed. Use list_pages to find valid page IDs.
Delete a WordPress page. By default moves to trash. Set force=true to permanently delete.
List WordPress posts with filtering by status, author, category, tag, and search. Use page/per_page for pagination.
Get a single WordPress post by ID. Returns full post content including title, body, excerpt, and metadata.
Create a new WordPress post with title, content, status, categories, and tags. Defaults to draft status.
Update an existing WordPress post. Only provided fields will be changed. Use list_posts to find valid post IDs.
Delete a WordPress post. By default moves to trash. Set force=true to permanently delete.
Search across all WordPress content (posts, pages, terms). Filter by type and subtype. Use page/per_page for pagination.
List WordPress tags with filtering and search. Use page/per_page for pagination.
Get a single WordPress tag by ID. Returns name, slug, description, and post count.
Create a new WordPress tag with name, description, and optional slug.
Update an existing WordPress tag. Only provided fields will be changed. Use list_tags to find valid tag IDs. On WordPress.com, tag IDs are global and may change after update — always re-fetch after updating.
Delete a WordPress tag. Tags require force=true to delete (set by default). On WordPress.com, tag IDs are global and may differ from creation IDs — use list_tags to find valid IDs before deleting.
List all registered WordPress taxonomies (e.g., category, post_tag, and custom taxonomies).
Get details of a specific WordPress taxonomy by slug (e.g., 'category', 'post_tag').
List all registered WordPress post types (e.g., post, page, attachment, and custom post types).
Get details of a specific WordPress post type by slug (e.g., 'post', 'page', 'attachment').
Validate WordPress credentials by calling the users/me endpoint. Returns success status and user info.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}It's an MCP server that lets your agents access data and functionality from a WordPress instance via tools. Your agents can invoke these tools to create and update posts, manage pages, moderate comments, organize categories and tags, and more.
WordPress.com offers an official MCP server, but you can also use one from a third-party platform, like Merge Agent Handler.
The use cases naturally depend on the agent you've built, but here are a few common ones:
Here are some of the most commonly used tools:
create_post: creates a new WordPress post with a specified title, content, status, categories, and tags. Useful for agents that need to publish content automatically in response to an external triggerlist_posts: retrieves posts filtered by status, category, author, or date range. Call this when an agent needs to audit what's already been published before generating or scheduling new contentupdate_post: modifies specific fields on an existing post without affecting unspecified fields. Good for workflows that need to change a post's status, revise its body, or reassign its category based on a downstream eventlist_comments: fetches comments across the site or scoped to a specific post, with optional filtering by approval status. Helpful when an agent needs to surface pending moderation items or compile reader feedback for a reportcreate_category: adds a new category to the WordPress taxonomy. Use this when an agent is preparing content structure ahead of a batch of posts that need consistent organizationsearch: runs a cross-content query across posts, pages, and other content types. Call this when an agent needs to check for duplicates or find related existing content before creating something newA few things set Merge Agent Handler's WordPress MCP server apart from building or using an alternative:
You can take the following steps:
1. Create or log into your Merge Agent Handler account.
2. Install the Merge CLI by running pipx install merge-api, then run merge configure to link the CLI to your Merge account and merge login to authenticate your session.
3. Register the Agent Handler MCP server with Claude Code by running claude mcp add --transport http agent-handler https://ah-api.merge.dev/mcp, then open Claude Code and run /mcp to confirm agent-handler appears with a connected status.
4. Select agent-handler from the MCP list. This opens a browser window where you select which integrations to authenticate. Choose WordPress and complete the auth flow. Merge stores and manages the credentials going forward.
5. Open a Claude Code session and start querying WordPress data directly. The first time you use a WordPress tool, a Magic Link may appear to complete connector authentication.
If you want to connect Merge Agent Handler's WordPress MCP with internal or customer-facing agentic products, you can follow the steps in our docs.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now