WPNerve WP Registry grade A. No security issues foundWP RegistryNo security issues foundOpen the reportA
MCP server nativo y capa de control de agentes para WordPress. Protocolo Model Context Protocol (2026-07-28 + legacy) sobre la Abilities API nativa, con policy engine, auditoría y HTTPS obligatorio.
Install
Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/akelaonline/wp-nerve/releases/download/v0.1.0-alpha.4/wp-nerve-v0.1.0-alpha.4.zipThe native agent gateway for WordPress.
WPNerve is a self-hosted WordPress plugin that exposes carefully selected native WordPress Abilities as Model Context Protocol (MCP) tools. It runs entirely inside the WordPress installation: no relay, no SaaS control plane, no external database.
🇬🇧 Full docs in English below — 🇪🇸 Documentación completa en español más abajo.
Project status: early alpha. The 53-ability v1 surface, secure credential onboarding, persistent mutation idempotency, out-of-band high-risk confirmation, fail-closed endpoint rate limiting and privileged-surface hardening are implemented. Do not install this branch on a production site before the remaining beta gates and security review complete.
English
What is WPNerve?
WPNerve turns WordPress into a first-class citizen for AI agents. Instead of
punching holes into wp-admin or using a SaaS relay that stores your credentials,
you install one plugin and get a private, authenticated MCP endpoint on your
own site. An agent can inspect and manage the selected surfaces using the same
WordPress capabilities and permissions you already manage in the admin.
WPNerve deliberately does not expose “100% of WordPress.” Arbitrary SQL, PHP,
shell, WP-CLI, filesystem and wp-config.php access remain outside the core;
only reviewed, schema-defined abilities become MCP tools.
- Native. Built on the WordPress 6.9+ Abilities API instead of a parallel action registry.
- Self-hosted. Runs inside WordPress. No external service ever sees your requests or credentials.
- Secure by default. HTTPS required in production, WordPress-native authentication, fail-closed boundary controls and a central policy engine that denies destructive and privileged actions by default.
Why WPNerve
- WordPress 6.9+ native Abilities API, not a parallel action registry.
- MCP
2026-07-28stateless HTTP plus compatibility with clients2025-11-25and2025-06-18. - WordPress Application Password and OAuth 2.1 authentication over HTTPS.
- A central policy gate separate from ability business logic.
- Least-privilege tool discovery: each user sees only the abilities they can execute subject to object-level authorization.
- Privacy-preserving audit events without credentials or tool arguments.
- Destructive and privileged risk classes denied by default.
- Persistent idempotency for every mutation.
- Short-lived WordPress-admin confirmation for destructive and privileged calls.
- Independent fail-closed rate limits for MCP and OAuth boundaries.
- Additional allowlists, redaction and object guards around users, plugins, options, transients and system diagnostics.
Architecture
flowchart LR
A["MCP / OAuth client"] --> B["Rate limit"]
B --> C["HTTP transport"]
C --> D["Authentication"]
D --> E["High-risk confirmation"]
E --> F["Idempotency"]
F --> G["Policy + object guards"]
G --> H["Abilities API"]
H --> I["WordPress"]
G --> J["Audit log"]
The protocol, transport, policy, security, and WordPress ability layers are deliberately separate. A future protocol revision can replace the transport and dispatcher without rewriting content operations. See Architecture and Threat model.
Quick start
- Install and activate the plugin on a WordPress 6.9+ site (PHP 8.1+).
- Open Tools → WPNerve to see your MCP endpoint:
https://your-site.com/wp-json/wp-nerve/v1/mcp - In Tools → WPNerve, select a dedicated WordPress user with only the capabilities the agent needs and click Generate WPNerve credential.
- Copy the one-time secret or the ready-to-use client configuration. WPNerve verifies the credential against its MCP endpoint without persisting it.
- Revoke WPNerve credentials from the same screen when a client is retired or a device is lost.
- If you enable destructive or privileged risk classes and individual tools, approve each matching short-lived operation code in Tools → WPNerve before the client retries it.
Never commit or share the Application Password. If a client or device is lost, revoke the password immediately.
Selected tools
| Tool | Description | Risk |
|---|---|---|
wp_nerve_site_status |
Non-sensitive site and WPNerve runtime diagnostics | Read |
wp_nerve_list_content_types |
Public content types with REST and supports info | Read |
wp_nerve_search_content |
Search content with post type, status, and pagination controls | Read |
wp_nerve_get_content |
Single post with full content, gated by status and capability | Read |
The implemented v1 catalog contains 53 abilities across content lifecycle, revisions, taxonomy, media, comments, menus, widgets, users, plugins, options and system diagnostics. See the full ability catalog.
Example requests
Replace the host, username, and Application Password. Never commit the password.
Discovery (modern protocol):
curl --user 'USERNAME:APPLICATION_PASSWORD' \
--header 'Content-Type: application/json' \
--header 'MCP-Protocol-Version: 2026-07-28' \
--header 'Mcp-Method: server/discover' \
--data '{
"jsonrpc": "2.0",
"id": 1,
"method": "server/discover",
"params": {
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientCapabilities": {},
"io.modelcontextprotocol/clientInfo": {
"name": "manual-test",
"version": "1.0.0"
}
}
}
}' \
'https://example.com/wp-json/wp-nerve/v1/mcp'
List tools:
curl --user 'USERNAME:APPLICATION_PASSWORD' \
--header 'Content-Type: application/json' \
--header 'MCP-Protocol-Version: 2026-07-28' \
--header 'Mcp-Method: tools/list' \
--data '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list",
"params": {
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientCapabilities": {},
"io.modelcontextprotocol/clientInfo": {
"name": "manual-test",
"version": "1.0.0"
}
}
}
}' \
'https://example.com/wp-json/wp-nerve/v1/mcp'
Call a tool:
curl --user 'USERNAME:APPLICATION_PASSWORD' \
--header 'Content-Type: application/json' \
--header 'MCP-Protocol-Version: 2026-07-28' \
--header 'Mcp-Method: tools/call' \
--header 'Mcp-Name: wp_nerve_site_status' \
--data '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "wp_nerve_site_status",
"arguments": {},
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientCapabilities": {},
"io.modelcontextprotocol/clientInfo": {
"name": "manual-test",
"version": "1.0.0"
}
}
}
}' \
'https://example.com/wp-json/wp-nerve/v1/mcp'
Security posture
- The endpoint is private and requires an authenticated WordPress user.
- Production HTTP without TLS is rejected.
- Tool discovery and execution both pass through WPNerve policy and WordPress capability checks.
- MCP mirrored headers are checked against the JSON-RPC body.
- Unknown external WordPress abilities are not exposed automatically.
- Every mutation requires a credential-bound idempotency key.
- Destructive and privileged calls are hidden by default and require an expiring, argument-bound decision in the WordPress admin when enabled.
- Public MCP/OAuth boundaries have independent request budgets that fail closed.
- Arbitrary forwarding headers are not trusted to select the rate-limit subject.
- Protected options/transients and administrator-account boundaries have additional fail-closed guards beyond the broad risk class.
- Tool arguments, authorization headers, and Application Passwords are never written to the WPNerve audit table.
Report vulnerabilities privately according to SECURITY.md.
Requirements
- WordPress 6.9 or newer.
- PHP 8.1 or newer.
- HTTPS in production.
- Pretty permalinks and the WordPress REST API available.
Development
composer install
composer check # lint + PHPCS + PHPStan level 8 + PHPUnit
composer test # PHPUnit only
composer check runs PHP syntax validation, coding standards, PHPStan level 8,
and the unit test suite. CI runs the same checks on PHP 8.1, 8.3, and 8.5,
verifies version consistency, and publishes a coverage report on every push.
Documentation
- Architecture
- Threat model
- Beta-readiness roadmap
- Ability catalog v1
- Mutation idempotency
- High-risk confirmations
- Rate limiting
- Privileged surfaces
- Architecture decision records
License
GPL-2.0-or-later. See LICENSE.
Español
¿Qué es WPNerve?
WPNerve convierte a WordPress en un ciudadano de primera clase para los agentes
de IA. En lugar de abrir agujeros en wp-admin o usar un relay SaaS que guarda
tus credenciales, instalás un plugin y obtenés un endpoint MCP privado y
autenticado en tu propio sitio. Un agente puede inspeccionar y gestionar las
superficies seleccionadas usando las mismas capacidades y permisos de WordPress
que ya administrás en el panel.
WPNerve no expone deliberadamente “el 100% de WordPress”. SQL, PHP, shell,
WP-CLI, filesystem y wp-config.php arbitrarios quedan fuera del núcleo; sólo
abilities revisadas y con schema se convierten en herramientas MCP.
- Nativo. Construido sobre la Abilities API nativa de WordPress 6.9+, no sobre un registro de acciones paralelo.
- Self-hosted. Corre dentro de WordPress. Ningún servicio externo ve tus pedidos o credenciales.
- Seguro por defecto. HTTPS obligatorio en producción, autenticación nativa de WordPress, límites fail-closed y un policy engine central que deniega acciones destructivas y privilegiadas por defecto.
Por qué WPNerve
- Abilities API nativa de WordPress 6.9+, no un registro paralelo de acciones.
- MCP
2026-07-28stateless HTTP más compatibilidad con clientes2025-11-25y2025-06-18. - Autenticación con Application Password y OAuth 2.1 sobre HTTPS.
- Un gate central de políticas separado de la lógica de negocio de las abilities.
- Descubrimiento de herramientas con mínimo privilegio y autorización por objeto.
- Eventos de auditoría que preservan la privacidad: sin credenciales ni argumentos de herramientas.
- Clases de riesgo destructivas y privilegiadas denegadas por defecto.
- Idempotencia persistente para toda mutación.
- Confirmación breve en el panel de WordPress para llamadas destructivas y privilegiadas.
- Rate limiting independiente y fail-closed para MCP y OAuth.
- Allowlists, redacción y protecciones específicas para usuarios, plugins, options, transients y diagnósticos del sistema.
Arquitectura
flowchart LR
A["Cliente MCP / OAuth"] --> B["Rate limit"]
B --> C["Transporte HTTP"]
C --> D["Autenticación"]
D --> E["Confirmación de alto riesgo"]
E --> F["Idempotencia"]
F --> G["Policy + object guards"]
G --> H["Abilities API"]
H --> I["WordPress"]
G --> J["Audit log"]
Las capas de protocolo, transporte, políticas, seguridad y abilities están separadas a propósito. Una revisión futura del protocolo puede reemplazar el transporte y el dispatcher sin reescribir las operaciones de contenido. Ver Arquitectura y Modelo de amenazas.
Inicio rápido
- Instalá y activá el plugin en un sitio con WordPress 6.9+ (PHP 8.1+).
- Abrí Herramientas → WPNerve para ver tu endpoint MCP:
https://tu-sitio.com/wp-json/wp-nerve/v1/mcp - En Herramientas → WPNerve, seleccioná un usuario de WordPress dedicado con sólo las capacidades necesarias y pulsá Generate WPNerve credential.
- Copiá el secreto de única visualización o la configuración lista para usar. WPNerve verifica la credencial sin persistirla.
- Revocá las credenciales desde la misma pantalla cuando retires un cliente o pierdas un dispositivo.
- Si habilitás clases y abilities destructivas o privilegiadas, aprobá cada código de operación en Herramientas → WPNerve antes de que el cliente reintente.
Nunca commitees ni compartas la Application Password. Si perdés un cliente o dispositivo, revocá la contraseña de inmediato.
Herramientas seleccionadas
| Herramienta | Descripción | Riesgo |
|---|---|---|
wp_nerve_site_status |
Diagnóstico no sensible del sitio y de WPNerve | Lectura |
wp_nerve_list_content_types |
Tipos de contenido públicos con info de REST y supports | Lectura |
wp_nerve_search_content |
Búsqueda de contenido con filtros de tipo, estado y paginación | Lectura |
wp_nerve_get_content |
Post individual con contenido completo, según estado y capacidad | Lectura |
El catálogo v1 implementado contiene 53 abilities de contenido, revisiones, taxonomías, medios, comentarios, menús, widgets, usuarios, plugins, opciones y diagnóstico del sistema. Ver el catálogo completo.
Postura de seguridad
- El endpoint es privado y requiere un usuario de WordPress autenticado.
- HTTP sin TLS en producción es rechazado.
- El descubrimiento y la ejecución pasan por las políticas de WPNerve y los capabilities de WordPress.
- Los headers MCP reflejados se verifican contra el cuerpo JSON-RPC.
- Las abilities externas desconocidas de WordPress no se exponen automáticamente.
- Toda mutación requiere una clave de idempotencia ligada a la credencial.
- Las llamadas destructivas y privilegiadas están ocultas por defecto y, al habilitarlas, requieren una decisión breve ligada a sus argumentos en el panel.
- MCP y OAuth tienen presupuestos de requests independientes que fallan cerrado.
- Los forwarding headers arbitrarios no eligen la identidad de rate limiting.
- Options/transients protegidos y cuentas administrator tienen límites adicionales, aunque la clase de riesgo esté habilitada.
- Los argumentos de herramientas, headers de autorización y Application Passwords nunca se escriben en la tabla de auditoría.
Reportá vulnerabilidades de forma privada según SECURITY.md.
Requisitos
- WordPress 6.9 o superior.
- PHP 8.1 o superior.
- HTTPS en producción.
- Permalinks bonitos y REST API de WordPress disponible.
Desarrollo
composer install
composer check # lint + PHPCS + PHPStan nivel 8 + PHPUnit
composer test # solo PHPUnit
composer check corre validación de sintaxis PHP, estándares de código, PHPStan
nivel 8 y la suite de tests unitarios. La CI corre los mismos chequeos en PHP
8.1, 8.3 y 8.5, verifica la consistencia de versiones y publica cobertura.
Documentación
- Arquitectura
- Modelo de amenazas
- Roadmap de beta
- Catálogo de abilities v1
- Idempotencia
- Confirmaciones de alto riesgo
- Rate limiting
- Superficies privilegiadas
Licencia
GPL-2.0-or-later. Ver LICENSE.
Akela WordPress
Production-grade WordPress infrastructure for performance, SEO, automation and AI agents.
WPNerve forma parte de la familia Akela WordPress:
- WP-Nerve — native control layer / MCP gateway para agentes y WordPress.
- Akela SEO — SEO técnico y automatizable para WordPress.
- PageRelay — AI-to-WordPress deployment layer para páginas nativas, editables y reversibles.
- NO Comments — cierre y limpieza integral de comentarios, con REST y WP-CLI.
- Tucho Performance — performance, caché y optimización WordPress 100% local.
Los productos son independientes, pero comparten los mismos principios: self-hosted cuando importa, APIs explícitas, seguridad por diseño, observabilidad y operación real en producción.
Professional ecosystem
- MKT Marketing Digital — agencia de marketing digital, implementación y growth.
- The Thing — producto de MKT para atención y ventas con IA.
- Marketing Digital Experience — consultoría, formación y transferencia de conocimiento en IA aplicada.
- Nubelytics — analytics + AI para ecommerce.
- Zantal — agentic commerce intelligence.
Autor, soporte y contacto
Built by Alejandro Daniel José · Akela.
- Para bugs y mejoras técnicas: GitHub Issues.
- Para vulnerabilidades: SECURITY.md.
- Para implementación, integraciones o trabajo profesional: MKT Marketing Digital.
- Para consultoría y capacitación en IA: Marketing Digital Experience.
Releases
2 releases. Each count is every asset in that release; expand a row for the breakdown.