Documentação

Configurar o servidor MCP para Craft CMS.

Este guia vai de uma instalação vazia do Craft até um cliente de IA ligado. Explica também cada definição que limita o cliente.

1. Instalar

Ainda não é possível instalar. A ficha na Craft Plugin Store está em preparação e, até estar publicada, o pacote não pode ser resolvido — os dois comandos abaixo não o vão encontrar. Estão aqui para que veja como será a instalação.

composer require alphabridge/mcp
php craft plugin/install alphabridge-mcp

A migração cria duas tabelas, alphabridge_tokens e alphabridge_audit. A desinstalação remove-as de novo e não deixa nada para trás:

php craft plugin/uninstall alphabridge-mcp

Requisitos: Craft CMS 5.9+, PHP 8.2+, MySQL 8.0.17+ / MariaDB 10.4.6+ ou PostgreSQL 13+.

2. Criar um token

No painel de controlo, abra AlphaBridge MCP na barra lateral. A página só está aberta a administradores. Escolha o utilizador do Craft a que o token pertence, um âmbito, um rótulo para o reconhecer mais tarde e, opcionalmente, uma validade em dias.

O token em texto simples é mostrado uma única vez, logo após a criação. Só é guardado o seu hash SHA-256, por isso não pode ser mostrado de novo. Copie-o antes de sair da página; se o perder, revogue-o e crie um novo.

O mesmo funciona a partir da consola, o que é útil para configurações automatizadas:

php craft alphabridge-mcp/tokens/create --user=admin --scope=read --label="Claude Desktop"
php craft alphabridge-mcp/tokens/list
php craft alphabridge-mcp/tokens/revoke 1

--expires-in-days=30 limita a validade de um token; 0, o valor predefinido, significa sem expiração.

O que significa um âmbito

Um token está associado exatamente a um utilizador do Craft e trabalha com as permissões desse utilizador. O âmbito restringe ainda mais; nunca alarga.

ÂmbitoPermite
readAs ferramentas de leitura, sem as ferramentas de administrador. Não altera nada.
contentAs ferramentas de leitura, mais a escrita de entradas, rascunhos, categorias e globais. Continua sem as ferramentas de administrador.
fullTudo o que o utilizador associado pode fazer, incluindo as ferramentas de administrador: campos do esquema, informações do sistema, registo de auditoria, base de dados, registos, caches, rotas, fila, plugins, grupos de utilizadores.

3. Ligar um cliente

O endpoint é POST https://your-site.example/alphabridge/mcp — JSON-RPC 2.0 por Streamable HTTP, versões do protocolo 2025-03-26 e 2025-06-18. O token segue num cabeçalho:

Authorization: Bearer abmcp_…

X-Api-Key: abmcp_… também funciona. Qualquer cliente MCP que fale Streamable HTTP e consiga enviar um cabeçalho personalizado pode ligar-se.

Claude Code

Um comando:

claude mcp add --transport http craft https://your-site.example/alphabridge/mcp \
  --header "Authorization: Bearer abmcp_…"

Claude Desktop · Cursor

Acrescente isto à configuração MCP do cliente. O token fica numa variável de ambiente, para não acabar no ficheiro que é partilhado:

{ "mcpServers": { "craft": {
  "command": "npx",
  "args": ["mcp-remote", "https://your-site.example/alphabridge/mcp",
           "--header", "Authorization:${AUTH}"],
  "env": { "AUTH": "Bearer abmcp_YOUR_TOKEN" }
}}}

Clientes que só conseguem pôr o token no URL

Alguns clientes aceitam um URL de conector, mas nenhum cabeçalho personalizado. Para esses, existe um segundo endpoint que leva o token no caminho — desligado por predefinição. Ative primeiro Allow the token in the URL path nas definições e tenha consciência do compromisso: um token num caminho acaba em registos do servidor, registos de proxies e cabeçalhos referer com muito mais facilidade do que num cabeçalho.

https://your-site.example/alphabridge/mcp/abmcp_YOUR_TOKEN

4. Definições

No painel de controlo, em Settings → Plugins → AlphaBridge MCP.

  • Read-only mode (modo só de leitura) — enquanto estiver ativo, nenhuma ferramenta que altere algo será executada. Está acima de todos os outros interruptores.
  • Tools (ferramentas) — cada ferramenta está em Default (on), Default (off), On ou Off. As ferramentas que alteram o estado estão desligadas por predefinição. Default é um estado próprio, não um sinónimo de ligado ou desligado: uma versão futura pode reclassificar uma ferramenta, e um site que escolheu Default segue essa reclassificação em vez de congelar uma decisão antiga.
  • Calls per minute and token (chamadas por minuto e por token) — um travão contra um modelo em ciclo. Não é uma defesa contra alguém determinado que tenha um token válido.
  • Allow the token in the URL path (token no URL) — desligado por predefinição, ver acima.
  • Additional allowed origins (origens permitidas adicionais) — para clientes baseados no navegador, ver abaixo.

As mesmas definições podem ser feitas em config/alphabridge-mcp.php. Um valor definido no ficheiro prevalece sobre o painel de controlo, e a página de definições assinala cada campo afetado e diz de onde vem o seu valor.

return [
    'readOnly' => false,
    'rateLimit' => 120,
    'connectorUrlAuthEnabled' => false,
    'allowedOrigins' => ['https://client.example', '$MCP_ALLOWED_ORIGINS'],
    'toolState' => ['craft_create_entry' => true],
];

Os tokens não fazem parte das definições, de propósito: são segredos, e as definições dos plugins ficam na configuração do projeto, que é enviada para o Git. Em vez disso, os tokens têm a sua própria página.

Origens e DNS rebinding

Se um cliente enviar um cabeçalho Origin, este tem de estar na lista de permissões, ou o endpoint responde HTTP 403. A lista de permissões é formada pelas allowedOrigins configuradas mais o URL do site — mas só quando estes podem ser determinados estaticamente: um URL fixo com esquema e anfitrião, eventualmente guardado numa variável de ambiente que contenha esse URL. É resolvido exatamente um nível.

Um URL do site construído a partir de um alias do Craft como @web não conta, nem mesmo dentro de uma variável de ambiente. O Craft constrói @web a partir do cabeçalho Host do pedido recebido, por isso um atacante seria comparado consigo próprio. Nestas instalações, allowedOrigins é a única fonte; se estiver vazia, todos os pedidos com um Origin são recusados. Os clientes servidor-a-servidor não enviam Origin e não são afetados.

5. Licença e experimentação

O plugin é vendido através da Craft Plugin Store sob a Craft License: uma licença por ambiente de produção. A ficha na loja está em preparação; até estar publicada, o plugin não pode ser comprado lá. Os ambientes de desenvolvimento e de staging podem ser experimentados gratuitamente — isso faz parte da Craft License, não é um período experimental concedido por nós.

6. Quando algo não funciona

O que vêO que significa
401O token está em falta, é desconhecido, expirou ou foi revogado. Verifique se o cabeçalho chega mesmo — alguns proxies removem Authorization. Crie um token novo para excluir um erro de escrita; o texto simples só é mostrado uma vez, por isso uma cópia parcial é uma causa frequente.
403Foi enviado um cabeçalho Origin que não está na lista de permissões. Ver Origens. Os clientes servidor-a-servidor não enviam Origin.
Unknown toolOu o nome não existe, ou o âmbito do token não o abrange. Estes dois casos têm a mesma resposta de propósito: a diferença diria a quem chama o que mais existe.
Uma recusa que indica o motivoO modo só de leitura está ativo, a ferramenta está desligada nas definições, ou é uma ferramenta de administrador e o utilizador associado não o é. Aqui, a resposta diz qual dos casos é, para não procurar a falha do seu lado. Estas ferramentas também não aparecem na lista de ferramentas.
Limite de pedidosMais chamadas por minuto do que a definição permite, contadas por token. Aumente o limite ou abrande o cliente.
Lista vaziaNão é um erro. O utilizador associado não pode ver essa secção ou esse grupo de categorias — uma secção ou um grupo desconhecido ou proibido devolve uma lista vazia, em vez de um erro que revelaria a sua existência. Já um identificador de site que não existe é indicado como erro.

O registo de auditoria regista cada chamada com o respetivo resultado. Leia-o com a ferramenta craft_audit_log (âmbito de administrador) para ver o que um cliente realmente fez.

A seguir: a referência completa de ferramentas, gerada a partir do catálogo interno do próprio plugin, e como funciona a cadeia de segurança.