Advertencia: Droost es un módulo para usar en modo desarrollo, al igual de otros módulos como Devel. El uso de este módulo en entornos de producción está totalmente desaconsejado.
Los desarrolladores (en general) de Drupal tratan de encontrar herramientas para facilitar y agilizar el desarrollo, y gracias a la popularización de la IA, esto ha sido posible de una manera drástica. Para comunicar la IA con los portales Drupal se han explicado ya varias maneras, por ejemplo este artículo que habla sobre la integración de Drupal con Claude / opencode. Con el paso del tiempo, nuevas herramientas van apareciendo, y una de ellas es el módulo Droost.
¿Qué es el módulo Droost?
Droost es un módulo para Drupal pensado para mejorar la forma en la que los asistentes y agentes de inteligencia artificial trabajan sobre un proyecto. Tiene como objetivo facilitar la comunicación de la información estructurada y actualizada sobre la aplicación Drupal que se está ejecutando, evitando que tengan que deducir su arquitectura únicamente a partir de archivos de configuración, consultas a base de datos, etc.
Para conseguirlo, Droost utiliza el protocolo MCP. En este caso Drupal actúa como fuente de contexto y capacidades.
Esto resuelve uno de los principales problemas al utilizar asistentes de IA durante el desarrollo: normalmente, el agente no conoce con precisión qué versión de Drupal estamos utilizando, qué módulos están instalados, qué tipos de entidad y campos existen o cómo está configurado el proyecto. Sin ese contexto, puede proponer APIs obsoletas, servicios que no existen o soluciones que no encajan con la arquitectura real del sitio.
La diferencia respecto a pedirle simplemente al asistente que ejecute comandos de Drush es que estas capacidades están descritas mediante esquemas y devuelven resultados predecibles en lugar de interpretar la salida de texto de distintos comandos. De esta forma, sus respuestas pueden ajustarse a las versiones, módulos y configuraciones reales del proyecto.
¿Se pueden hacer operaciones de escritura?
Una de las cosas que más facilita el trabajo a la hora de trabajar con Drupal y la IA es la de crear Tipos de contenido, taxonomías, paragraphs, menús, etc. a partir de prompts o archivos .md de definición. Con Droost también es posible hacer estas operaciones ya que no se limita a ofrecer información de solo lectura, también incluye herramientas capaces de realizar operaciones como modificar configuración, instalar módulos, crear o actualizar entidades, crear Vistas, etc. Sin embargo, estas operaciones están protegidas y desactivadas por defecto.
Instalación
Para la instalación se van a utilizar las herramientras Composer y Drush.
Primero se instalará el paquete via composer:
composer require 'drupal/droost:^1.0@alpha'Ahora hay que habilitar el módulo y los submódulos del mismo para tener algunas funcionalidades:
drush en droost, droost_brain, droost_devel, droost_search, droost_viewsAhora hay que lanzar el comando que inicializa la configuración de Drush. En este caso se está usando ddev, por lo que hay que especificarlo:
ddev drush droost:install --launcher=ddevAñadir al opencode.json o al archivo necesario si no lo ha hecho el módulo automáticamente lo siguiente:
{
"mcp": {
"droost": {
"type": "local",
"command": ["ddev", "drush", "mcp:server"],
"enabled": true
}
}
}Prueba de listado tipo de contenidos artículos
Para realizar el experimento se ha hecho una prueba que lista el Tipo de contenido artículos usando, por un lado Droost, y por otro examinando los archivos del portal. El resultado ha sido cronometrado para poder comparar tiempo de ejecución. Los documentos están en formato MD, para un major lectura se pueden copiar y usar un previsualizador de MD.
Tipos de contenido y campos - Droost
Fecha de ejecucion: 2026-07-16 16:00:12 CEST
Fuente: Droost MCP (droost_entities)
Inicio cronometro: 1784210556613 ms
Fin cronometro: 1784210566252 ms
Duracion: 9639 ms
Alcance: configuracion activa de Drupal consultada via Entity API.
Campos base comunes
Droost devuelve estos campos base en todos los bundles de nodo.
Campos base: 25
Campo Etiqueta Tipo Requerido Traducible Cardinalidad Target type
nid nid integer no no 1 -
uuid uuid uuid no no 1 -
vid vid integer no no 1 -
langcode langcode language no si 1 -
type Tipo de contenido entity_reference si no 1 node_type
revision_timestamp revision_timestamp created no no 1 -
revision_uid revision_uid entity_reference no no 1 user
revision_log revision_log string_long no no 1 -
status status/Publicado boolean no variable 1 -
uid uid/Escrito por entity_reference no variable 1 user
title title/Titulo string si variable 1 -
created created/Fecha de autoria created no variable 1 -
changed changed/Modificado changed no variable 1 -
promote Promocionado a la pagina principal boolean no variable 1 -
sticky sticky/Fijo al comienzo de las listas boolean no variable 1 -
default_langcode default_langcode boolean no si 1 -
revision_default revision_default boolean no no 1 -
revision_translation_affected revision_translation_affected boolean no si 1 -
metatag metatag/Metatags metatag_computed/map no variable -1 -
path path/Alias de URL path no variable 1 -
publish_on publish_on timestamp no si 1 -
unpublish_on unpublish_on timestamp no si 1 -
menu_link menu_link/Enlace del menu entity_reference no variable 1 menu_link_content
content_translation_source content_translation_source language no si 1 -
content_translation_outdated content_translation_outdated boolean no si 1 -
article - Articulo
Campos totales via Droost: 29 Campos configurables: 4
Campo Etiqueta Tipo Requerido Traducible Cardinalidad Target type
article__category Categoria entity_reference si no 1 taxonomy_term
article__tags Etiquetas de publicacion entity_reference no no -1 taxonomy_term
body Descripcion text_with_summary no si 1 -
image Imagen entity_reference no si 1 media
offer - Oferta de empleo
Campos totales via Droost: 30 Campos configurables: 5
Campo Etiqueta Tipo Requerido Traducible Cardinalidad Target type
body Descripcion text_with_summary no no 1 -
image Imagen entity_reference no no 1 media
offer__highlights Aspectos destacados entity_reference_revisions no no -1 paragraph
offer__tags Etiquetas de oferta string no no -1 -
structure Estructura entity_reference_revisions no si -1 paragraph
page - Pagina Avanzada
Campos totales via Droost: 28 Campos configurables: 3
Campo Etiqueta Tipo Requerido Traducible Cardinalidad Target type
body Texto text_with_summary no si 1 -
meta_descipcion Meta descipcion metatag no si 1 -
structure Estructura entity_reference_revisions no si -1 paragraph
project - Proyecto
Campos totales via Droost: 36 Campos configurables: 11
Campo Etiqueta Tipo Requerido Traducible Cardinalidad Target type
body Texto text_with_summary no si 1 -
extlink Url link no no 1 -
image Imagen entity_reference no no 1 media
image_list Imagen listado entity_reference si no 1 media
meta_descipcion Meta descipcion metatag no si 1 -
project__client Cliente string no no 1 -
project__is_innovation Innovacion boolean no no 1 -
project__is_success Caso de exito boolean no no 1 -
project__sector Sector entity_reference no no 1 taxonomy_term
project__tools Herramientas entity_reference no no -1 node
structure Estructura entity_reference_revisions no no -1 paragraph
service - Servicio
Campos totales via Droost: 30 Campos configurables: 5
Campo Etiqueta Tipo Requerido Traducible Cardinalidad Target type
body Descripcion text_with_summary si si 1 -
icon_font Icono Fontawesome fontawesome_icon si no 1 -
image Imagen entity_reference no no 1 media
meta_descipcion Meta descipcion metatag no si 1 -
structure Estructura entity_reference_revisions no si -1 paragraph
tool - Herramienta
Campos totales via Droost: 28 Campos configurables: 3
Campo Etiqueta Tipo Requerido Traducible Cardinalidad Target type
body Descripcion text_with_summary no si 1 -
image Imagen entity_reference no si 1 media
tool__service Servicio entity_reference si no 1 node
Observaciones
Droost devuelve los campos base, campos computados y campos configurables tal como los expone la Entity API activa.
Para evitar repetir 25 campos base por bundle, se listan una vez y cada tipo muestra sus campos configurables.
Los bundles activos detectados por Droost coinciden con los tipos exportados en config/sync en esta prueba.Listando el contenido de manera convencional:
# Tipos de contenido y campos - Configuracion YAML
- Fecha de ejecucion: 2026-07-16 16:00:12 CEST
- Fuente: ficheros YAML de `config/sync`
- Inicio cronometro: `1784210443407` ms
- Fin cronometro: `1784210472950` ms
- Duracion: `29543` ms
- Alcance: configuracion exportada en disco (`node.type.*`, `field.field.node.*.*`, `field.storage.node.*`).
## article - Articulo
Campos configurables: 4
| Campo | Etiqueta | Tipo | Requerido | Traducible | Cardinalidad | Target type |
| --- | --- | --- | --- | --- | --- | --- |
| `article__category` | Categoria | entity_reference | si | no | 1 | taxonomy_term |
| `article__tags` | Etiquetas de publicacion | entity_reference | no | no | -1 | taxonomy_term |
| `body` | Descripcion | text_with_summary | no | si | 1 | - |
| `image` | Imagen | entity_reference | no | si | 1 | media |
## offer - Oferta de empleo
Campos configurables: 5
| Campo | Etiqueta | Tipo | Requerido | Traducible | Cardinalidad | Target type |
| --- | --- | --- | --- | --- | --- | --- |
| `body` | Descripcion | text_with_summary | no | no | 1 | - |
| `image` | Imagen | entity_reference | no | no | 1 | media |
| `offer__highlights` | Aspectos destacados | entity_reference_revisions | no | no | -1 | paragraph |
| `offer__tags` | Etiquetas de oferta | string | no | no | -1 | - |
| `structure` | Estructura | entity_reference_revisions | no | si | -1 | paragraph |
## page - Pagina Avanzada
Campos configurables: 3
| Campo | Etiqueta | Tipo | Requerido | Traducible | Cardinalidad | Target type |
| --- | --- | --- | --- | --- | --- | --- |
| `body` | Texto | text_with_summary | no | si | 1 | - |
| `meta_descipcion` | Meta descipcion | metatag | no | si | 1 | - |
| `structure` | Estructura | entity_reference_revisions | no | si | -1 | paragraph |
## project - Proyecto
Campos configurables: 11
| Campo | Etiqueta | Tipo | Requerido | Traducible | Cardinalidad | Target type |
| --- | --- | --- | --- | --- | --- | --- |
| `body` | Texto | text_with_summary | no | si | 1 | - |
| `extlink` | Url | link | no | no | 1 | - |
| `image` | Imagen | entity_reference | no | no | 1 | media |
| `image_list` | Imagen listado | entity_reference | si | no | 1 | media |
| `meta_descipcion` | Meta descipcion | metatag | no | si | 1 | - |
| `project__client` | Cliente | string | no | no | 1 | - |
| `project__is_innovation` | Innovacion | boolean | no | no | 1 | - |
| `project__is_success` | Caso de exito | boolean | no | no | 1 | - |
| `project__sector` | Sector | entity_reference | no | no | 1 | taxonomy_term |
| `project__tools` | Herramientas | entity_reference | no | no | -1 | node |
| `structure` | Estructura | entity_reference_revisions | no | no | -1 | paragraph |
## service - Servicio
Campos configurables: 5
| Campo | Etiqueta | Tipo | Requerido | Traducible | Cardinalidad | Target type |
| --- | --- | --- | --- | --- | --- | --- |
| `body` | Descripcion | text_with_summary | si | si | 1 | - |
| `icon_font` | Icono Fontawesome | fontawesome_icon | si | no | 1 | - |
| `image` | Imagen | entity_reference | no | no | 1 | media |
| `meta_descipcion` | Meta descipcion | metatag | no | si | 1 | - |
| `structure` | Estructura | entity_reference_revisions | no | si | -1 | paragraph |
## tool - Herramienta
Campos configurables: 3
| Campo | Etiqueta | Tipo | Requerido | Traducible | Cardinalidad | Target type |
| --- | --- | --- | --- | --- | --- | --- |
| `body` | Descripcion | text_with_summary | no | si | 1 | - |
| `image` | Imagen | entity_reference | no | si | 1 | media |
| `tool__service` | Servicio | entity_reference | si | no | 1 | node |
## Observaciones
- Este metodo solo lista campos configurables exportados, no campos base ni campos computados de la Entity API.
- Los tipos exportados en `config/sync` coinciden con los bundles activos detectados por Droost en esta prueba.Como se puede comprobar en los documentos adjuntados, el resultado por Droost es bastante más rápido, con una información mejor formateada y más precisa que de manera convencional.
Cómo añadir contenidos, vistas, etc. con Droost
Lo primero es activar el poder crear, sobreescribir, etc. información en el portal. Para ello se puede hacer mediante drush o en la página de configuración del módulo.
ddev drush config:set droost.settings allow_destructive trueTambién se podría activar el PHP eval tool, pero con el permiso de MCP tools ya cubrimos la mayoría de casos y no es tan destructivo.
Con esto ya podríamos generar contenidos, vistas, menús, etc. Es importante nutrir también al proyecto con una skill base para que siga la convención con la que se esté acostumbrado a trabajar, ya que sino realizará las creaciones, etc. de manera genérica.
La imagen de este Post ha sido generada por Inteligencia Artificial.