From drupal-mcp
Read and write content on a Drupal site through its core JSON:API. Use this skill whenever the user asks to list, search, create, update, or delete Drupal nodes (articles, pages, custom content types), browse taxonomy terms, or list users on a Drupal site that has the drupal-mcp plugin configured. Trigger on phrases like "edit this article", "publish a new page", "what's the latest blog post", "delete this node", "list all articles in category X", or any direct mention of Drupal content. The plugin connects via HTTP Basic auth using DRUPAL_BASE_URL / DRUPAL_USER / DRUPAL_PASSWORD environment variables.
npx claudepluginhub lucaspretti/claude-plugins --plugin drupal-mcpThis skill uses the workspace's default tool permissions.
This plugin exposes a Drupal site's core JSON:API as MCP tools. It works on any Drupal 10/11 site with the `jsonapi` core module enabled.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
This plugin exposes a Drupal site's core JSON:API as MCP tools. It works on any Drupal 10/11 site with the jsonapi core module enabled.
drupal_list_nodes — list nodes of a bundle (filter / sort / paginate).drupal_get_node — fetch one node by UUID.drupal_create_node — create a new node.drupal_update_node — patch attributes or relationships.drupal_delete_node — delete by UUID.drupal_list_taxonomy_terms — list terms in a vocabulary.drupal_list_users — list users.drupal_query_jsonapi — escape hatch for arbitrary GETs.nids. Use drupal_list_nodes first to find the UUID.article, page).attributes is a flat object of JSON:API field names → values, e.g. { title: '...', body: { value: '...', format: 'basic_html' }, status: true }.relationships follow JSON:API shape: { field_image: { data: { type: 'file--file', id: 'uuid' } } }.{ field_category: '1' } becomes filter[field_category]=1. Operators: { field_category: { value: '1', operator: '=' } }.The MCP runs as a configured Drupal user. Permissions on that user's role decide what is reachable. For least privilege, create a mcp_bot user with a dedicated role that only grants the bundles/operations you actually need. JSON:API ignores the access_check flag — Drupal field access still applies.
Before any write, confirm with the user:
Deletion is irreversible. Always read first, then ask, then delete.
Find the latest published articles:
drupal_list_nodes(bundle='article', filter={status: 1}, sort='-created', limit=5)
Update an article body:
drupal_update_node(bundle='article', uuid='<uuid>', attributes={ body: { value: '...', format: 'basic_html' } })
Lookup taxonomy term ID for filter chains:
drupal_list_taxonomy_terms(vocabulary='category')
# then use the returned UUID in a node filter