Você decidiu tentar usar o WordPress com MCP e Claude Code. Mas por onde começar? Esta não foi uma resposta tão simples quanto eu esperava inicialmente, então decidi documentar esse processo para me ajudar no futuro e ajudar outras pessoas que estão tentando fazer a mesma coisa.

1. Requisitos

  1. Claude Code (guia de instalação em inglês).
  2. WordPress 6.9 ou superior.
  3. Plugin MCP Adapter: ainda não disponível no repositório oficial, você precisa baixar a versão mais recente do GitHub, instalar e ativá-lo.

2. Configuração do WordPress

2.1 Habilitando as abilities

A Abilities API foi adicionada no WordPress 6.9 com 3 Abilities principais para obter informações sobre o site, usuário e ambiente. Por padrão, elas não são públicas e você precisa habilitá-las. Você pode criar um plugin (ex.: /wp-content/mu-plugins/mcp-expose-core-abilities.php) com o seguinte código do post do WordPress Developer Blog (escrito por Jonathan Bossenger):

<?php
/**
 * Plugin Name: Enable core abilities
 * Version: 1.0.0
 *
 * @package enable-core-abilities
 */

add_filter( 'wp_register_ability_args', 'myplugin_enable_core_abilities_mcp_access', 10, 2 );
/**
 * Enable MCP access for core abilities.
 *
 * @param array  $args        Ability registration arguments.
 * @param string $ability_name  Ability ID.
 * @return array Modified ability registration arguments.
 */
function myplugin_enable_core_abilities_mcp_access( array $args, string $ability_name ) {
    // Enable MCP access for the three current core abilities.
    $core_abilities = array(
        'core/get-site-info',
        'core/get-user-info',
        'core/get-environment-info',
    );
    if ( in_array( $ability_name, $core_abilities, true ) ) {
        $args['meta']['mcp']['public'] = true;
    }

    return $args;
}
PHP

2.1 Criar uma Application Password

Duas das Abilities principais exigem um usuário com a capacidade de manage_options, o que geralmente requer a função de Administrador. Portanto, vá até a tela de edição do perfil de um usuário administrador, desça até a seção Application Passwords, preencha o campo New Application Password Name (ex.: Claude Code) e clique em Add Application Password.

Salve essa senha em um lugar seguro, pois você não poderá vê-la novamente.

2.3 Como testar se tudo está funcionando como esperado?

Você pode estar se perguntando: por que devo fazer isso? Tive dificuldades para conectar o Claude Code ao WordPress e não sabia ao certo onde estava o problema. Ao verificar isso e garantir que está funcionando como esperado, você saberá pelo menos que o problema não é com a configuração do WordPress. Se eu tivesse feito isso, teria economizado algumas horas de depuração.

Execute este comando no seu terminal para listar todas as abilities (e primeiro obter um ID de sessão necessário para isso). Não se esqueça de substituir WORDPRESS_USERNAME pelo valor do seu WordPress Username (não o Application Password Name) e APPLICATION_PASSWORD pela senha que você criou (cada um aparece duas vezes no comando):

SESSION=$(curl -s -D - -u "USER:PASS" \
  -X POST SITE_URL/wp-json/mcp/mcp-adapter-default-server \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}' \
  | grep -i "mcp-session-id" | awk '{print $2}' | tr -d '\r')

curl -u "USER:PASS" \
  -X POST SITE_URL/wp-json/mcp/mcp-adapter-default-server \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: $SESSION" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
Bash

Eu sei, é um comando complicado, mas não consegui encontrar uma forma de simplificá-lo. A boa notícia é que, se você tiver o WP-CLI, o comando é muito mais simples (e você só precisa alterar WORDPRESS_USERNAME):

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | wp mcp-adapter serve --user="WORDPRESS_USERNAME" --server=mcp-adapter-default-server
Bash

Para ambos os comandos, você deve receber algo assim de volta, que lista todas as abilities (formatei a saída com jq para este post):

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "tools": [
      {
        "name": "mcp-adapter-discover-abilities",
        "title": "Discover Abilities",
        "description": "Discover all available WordPress abilities in the system. Returns a list of all registered abilities with their basic information.",
        "inputSchema": {
          "type": "object"
        },
        "outputSchema": {
          "type": "object",
          "properties": {
            "abilities": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "label": {
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "label",
                  "description"
                ]
              }
            }
          },
          "required": [
            "abilities"
          ]
        },
        "annotations": {
          "title": "Discover Abilities",
          "readOnlyHint": true,
          "destructiveHint": false,
          "idempotentHint": true
        }
      },
      {
        "name": "mcp-adapter-get-ability-info",
        "title": "Get Ability Info",
        "description": "Get detailed information about a specific WordPress ability including its input/output schema, description, and usage examples.",
        "inputSchema": {
          "type": "object",
          "properties": {
            "ability_name": {
              "type": "string",
              "description": "The full name of the ability to get information about"
            }
          },
          "required": [
            "ability_name"
          ]
        },
        "outputSchema": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "label": {
              "type": "string"
            },
            "description": {
              "type": "string"
            },
            "input_schema": {
              "type": "object",
              "description": "JSON Schema for the ability input parameters"
            },
            "output_schema": {
              "type": "object",
              "description": "JSON Schema for the ability output structure"
            },
            "meta": {
              "type": "object",
              "description": "Additional metadata about the ability"
            }
          },
          "required": [
            "name",
            "label",
            "description",
            "input_schema"
          ]
        },
        "annotations": {
          "title": "Get Ability Info",
          "readOnlyHint": true,
          "destructiveHint": false,
          "idempotentHint": true
        }
      },
      {
        "name": "mcp-adapter-execute-ability",
        "title": "Execute Ability",
        "description": "Execute a WordPress ability with the provided parameters. This is the primary execution layer that can run any registered ability.",
        "inputSchema": {
          "type": "object",
          "properties": {
            "ability_name": {
              "type": "string",
              "description": "The full name of the ability to execute"
            },
            "parameters": {
              "type": "object",
              "description": "Parameters to pass to the ability"
            }
          },
          "required": [
            "ability_name",
            "parameters"
          ]
        },
        "outputSchema": {
          "type": "object",
          "properties": {
            "success": {
              "type": "boolean"
            },
            "data": {
              "type": [
                "object",
                "array",
                "string",
                "number",
                "integer",
                "boolean",
                "null"
              ],
              "description": "The result data from the ability execution"
            },
            "error": {
              "type": "string",
              "description": "Error message if execution failed"
            }
          },
          "required": [
            "success"
          ]
        },
        "annotations": {
          "title": "Execute Ability",
          "readOnlyHint": false,
          "destructiveHint": true,
          "idempotentHint": false
        }
      }
    ]
  }
}
Bash
Expand

Ótimo, agora sabemos que a configuração do WordPress está funcionando!

3. Configuração do Claude Code

  1. Crie uma nova pasta para armazenar as configurações do MCP (ex.: wp-mcp) e abra-a
  2. Crie um novo arquivo chamado .mcp.json com o seguinte conteúdo, substituindo:
    • SITE_URL pela URL do seu site com HTTP/HTTPS (ex.: https://www.danielkossmann.com)
    • WORDPRESS_USERNAME pelo nome de usuário do WordPress que você criou (este NÃO é o Application Password Name)
    • APPLICATION_PASSWORD pela Application Password criada no Passo 2.
{
  "mcpServers": {
    "wordpress-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@automattic/mcp-wordpress-remote@latest"
      ],
      "env": {
        "WP_API_URL": "SITE_URL/wp-json/mcp/mcp-adapter-default-server",
        "WP_API_USERNAME": "WORDPRESS_USERNAME",
        "WP_API_PASSWORD": "APPLICATION_PASSWORD",
        "LOG_FILE": "/tmp/mcp-wordpress.log"
      }
    }
  }
}
Bash
  1. Abra o terminal dentro da pasta que você criou no primeiro passo e execute claude
  2. Selecione para confiar na pasta e no servidor MCP
  3. Digite /mcp e pressione Enter.
  4. Você deve ver na lista algo como: wordpress-mcp-server · ✔ connected. Pressione Esc para voltar à tela principal.
  5. Digite algo como qual é o nome do meu site? e pressione Enter
  6. Conceda permissões para prosseguir usando as MCP abilities
  7. Voilà, você deve ver o título do site dentro do Claude Code!

Isso não é massa?!? Por enquanto as Abilities principais ainda são bastante limitadas, mas este guia é só mesmo sobre a configuração inicial. Em um post futuro, vou compartilhar como tenho usado minhas próprias Abilities personalizadas para realizar trabalhos de verdade.

Eu fiz isso no Ubuntu 25.10, e alguns detalhes podem variar dependendo do seu sistema. Lembrando que esta é apenas uma das muitas formas de configuração, então se você conhece outra boa abordagem, por favor compartilhe nos comentários.



Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *