feat(wordpress): skill mcp-cloudflare-app para o novo MCP da zona Cloudflare (app-for-cf)

Documenta as 14 tools do MCP dedicado descomplicar.pt (Bot Management, WAF Managed Ruleset, HSTS, CT, Leaked Credential Checks, purge cache), complementar à skill app-for-cloudflare existente. Keyword cloudflare adicionada ao manifesto.
This commit is contained in:
2026-08-19 05:10:03 +01:00
parent 639a5a4f6a
commit a2205076fc
2 changed files with 91 additions and 1 deletions
+1 -1
View File
@@ -8,5 +8,5 @@
},
"homepage": "https://git.descomplicar.pt/ealmeida/descomplicar-plugins",
"license": "MIT",
"keywords": ["wordpress", "woocommerce", "elementor", "crocoblock", "development", "performance", "licensing", "emcp-tools", "elementskit", "powerpack"]
"keywords": ["wordpress", "woocommerce", "elementor", "crocoblock", "development", "performance", "licensing", "emcp-tools", "elementskit", "powerpack", "cloudflare"]
}
@@ -0,0 +1,90 @@
---
name: mcp-cloudflare-app
description: MCP dedicado (HTTP StreamableHTTP local, ligação `cloudflare-app` em ~/.claude.json, porta 3201) para a zona Cloudflare gerida pelo plugin App for Cloudflare® (`app-for-cf`) em descomplicar.pt — definições de zona SSL/TLS/Speed/Caching/Network/Scrape Shield, Bot Management + Super Bot Fight Mode, WAF via Managed Ruleset, HSTS, Certificate Transparency, Leaked Credential Checks, purge de cache. Fala directamente com a Cloudflare API v4, sem passar pelo EMCP Tools nem pelo WordPress em runtime. Usar quando "waf cloudflare vazio", "bot management ai", "purge cache cloudflare", "hsts cloudflare", "managed ruleset", "is_robots_txt_managed", "certificate transparency cloudflare", "leaked credential checks", ou qualquer alteração de definição de zona Cloudflare via MCP em vez de curl manual.
layer: wiki
---
# /mcp-cloudflare-app — MCP dedicado à zona Cloudflare (App for Cloudflare®)
Projecto em `/media/ealmeida/Dados/Dev/mcp-cloudflare-app/` (TypeScript, SDK MCP oficial,
StreamableHTTP). Não é uma extensão do EMCP Tools nem fala com o WordPress em runtime — o plugin
App for Cloudflare® não expõe REST próprio (confirmado por leitura completa do código-fonte, ver
skill `app-for-cloudflare`). Toda a configuração de zona vive na Cloudflare API v4, não em
`wp_options`; este MCP fala directamente com essa API usando um token extraído uma vez de
`wp_options.app_for_cf.cloudflareAuth.token` e guardado em `.env` local (não em cada chamada).
**Relação com a skill `app-for-cloudflare`:** essa skill é a fonte de conhecimento (mapeamento
completo plugin↔Cloudflare API, gotchas, scopes de token, as ~52 definições de zona). Esta skill é
o "como executar" — qual tool chamar para cada operação. Consultar `app-for-cloudflare` para
entender uma definição; usar as tools abaixo para lê-la/escrevê-la.
## Âmbito
Zona actual configurada: **descomplicar.pt**. Para gerir outra zona do bundle, extrair
`cloudflareAuth.token`/`cfZoneId` de `wp_options.app_for_cf` desse site (SQL read-only, ver
"Credenciais" abaixo) e actualizar o `.env` do MCP — não há multi-zona numa única ligação.
Não cobre: R2 media storage, Zero Trust Access, Page/Cache Rules, Firewall Rules custom, DMARC,
Web Analytics, ferramentas de diagnóstico (request trace/IP/domain/WHOIS) — todas Pro-only na UI do
plugin ou fora do âmbito "definições de zona + segurança + purge" decidido na criação do MCP
(19-08-2026). Gerir manualmente via dashboard Cloudflare ou via curl directo (ver skill
`app-for-cloudflare` §10/§2 para os endpoints).
## Tools (14)
| Tool | Read-only | Uso |
|---|---|---|
| `cf_list_zone_settings` | sim | Lê todas as definições de zona em bloco |
| `cf_get_zone_setting` | sim | Lê uma definição por id (ex. `rocket_loader`, `cache_level`) |
| `cf_update_zone_setting` | não | Escreve uma definição por id — bloqueia ids de bot_management/`waf` com redirect accionável para a tool certa |
| `cf_get_bot_management` | sim | Lê Bot Management/SBFM completo (inclui campos fora da UI do plugin: `ai_bots_protection`, `is_robots_txt_managed`), sinaliza risco GEO |
| `cf_update_bot_management` | não | Escreve Bot Management/SBFM — merge parcial (lê, aplica só os campos dados, PUT completo; remove `using_latest_model` do payload automaticamente) |
| `cf_get_waf_status` | sim | Verifica se a fase `http_request_firewall_managed` tem regras `execute` reais (o toggle legado `waf` não garante protecção) |
| `cf_deploy_managed_ruleset` | não | Implanta o Cloudflare Managed Free Ruleset na fase managed — disponível em qualquer plano |
| `cf_get_hsts_settings` / `cf_update_hsts_settings` | sim/não | HSTS (`security_header`) |
| `cf_get_certificate_transparency` / `cf_update_certificate_transparency` | sim/não | Alertas CT (`ct/alerting`) |
| `cf_get_leaked_cred_checks` / `cf_update_leaked_cred_checks` | sim/não | Leaked Credential Checks |
| `cf_purge_cache` | não | Purga tudo (omitir `files`) ou até 30 URLs específicos |
Padrão Descomplicar® para Bot Management (GEO-crítico — ver skill `app-for-cloudflare` §5a):
`cf_update_bot_management` com `{"ai_bots_protection":"disabled","content_bots_protection":"disabled","crawler_protection":"disabled","ai_training":"disabled","ai_search":"disabled","ai_user":"disabled","fight_mode":false,"is_robots_txt_managed":false}`
— nunca aceitar o "good" que o próprio plugin recomenda para `ai_bots_protection`/`crawler_protection`
(`block`/`enabled`), é o oposto da decisão Descomplicar.
## Segurança
Escritas em `bot_management` fazem sempre GET→merge→PUT (nunca um PUT parcial cego — a Cloudflare
substitui o objecto inteiro). `cf_update_zone_setting` recusa explicitamente ids que pertencem ao
endpoint `bot_management` (`waf`, `bot_fight_mode`, `ai_bots_protection`, `crawler_protection`,
`bot_likely_automated`, `bot_definitely_automated`, `bot_verified_bots`,
`bot_static_resource_protection`, `bot_optimize_wordpress`, `bot_enable_js`) e devolve `isError`
com a tool certa a usar, em vez de deixar a Cloudflare rejeitar com `10405 Method not allowed`.
## Credenciais
`.env` local (`CLOUDFLARE_API_TOKEN`, `CLOUDFLARE_ZONE_ID`, `CLOUDFLARE_ACCOUNT_ID`,
`CLOUDFLARE_ZONE_NAME`), não versionado. Reextrair para outro site via SQL read-only (mais rápido
que SSH+WP-CLI se já houver uma ligação EMCP a esse site):
```sql
SELECT option_value FROM <prefixo>_options WHERE option_name = 'app_for_cf';
```
O valor é um array PHP serializado — extrair `cloudflareAuth.token` e `cfZoneId`. Confirmar o
prefixo real da tabela primeiro (`SHOW TABLES LIKE '%options%'`; em descomplicar.pt é `wpah_`, não
`wp_`).
## Verificação
Construído e testado ponta-a-ponta contra a zona real `descomplicar.pt` 19-08-2026: 12/12
evaluations (`npm run eval:ci`), incluindo leitura real que confirmou dois achados de produção
ainda por corrigir — WAF Managed Ruleset vazio (zero regras `execute`) e HSTS desligado. Bot
Management já correcto (sem risco GEO). Deploy como processo `hub` persistente (`mcp-cloudflare-app`,
porta 3201, `http://127.0.0.1:3201/mcp`), registado em `~/.claude.json` como `cloudflare-app`.
## Skills relacionadas
- `app-for-cloudflare` — mapeamento completo plugin↔Cloudflare API v4, gotchas, scopes de token,
as ~52 definições de zona, EasyConfig, WAF, Bot Management, HSTS, o modelo `wp_options.app_for_cf`.
- `wordfence` — se a decisão for usar Wordfence em vez do WAF Cloudflare como camada primária, é essa
a skill certa para regras/bloqueios ao nível da aplicação (este MCP só cobre o WAF de edge).