Skip to content

Drupal MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.16.3 · published by io.usefulapi

Read and write Drupal JSON:API nodes, taxonomy terms, users and files.

Deletes · 3

7 tools: 3 can delete or cancel things and 4 only read.

Scanned Oct 21, 2026

No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http drupal https://drupal.usefulapi.io/mcp

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

7 tools

Deletes or cancels 3Claude Code: deny
  • drupal_create_resourceCreate a new resource (content entity) for an entity_type/bundle.No findings

    Why it is in this group

    • The name "drupal_create_resource" says "create": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Create a new resource (content entity) for an entity_type/bundle. JSON:API: POST /jsonapi/{entity_type}/{bundle} → 201. Body is { data: { type: entity_type--bundle, attributes, relationships? } }.

    Annotations the server declares

    • title: Create resource
    • destructiveHint: true
  • drupal_delete_resourceDelete a resource by UUID.No findings

    Why it is in this group

    • The name "drupal_delete_resource" says "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Delete a resource by UUID. JSON:API: DELETE /jsonapi/{entity_type}/{bundle}/{uuid} → 204 (empty body). Returns a small confirmation.

    Annotations the server declares

    • title: Delete resource
    • destructiveHint: true
  • drupal_update_resourceUpdate an existing resource by UUID (partial update of attributes and/or relationships).No findings

    Why it is in this group

    • The name "drupal_update_resource" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Update an existing resource by UUID (partial update of attributes and/or relationships). JSON:API: PATCH /jsonapi/{entity_type}/{bundle}/{uuid}. Body is { data: { type, id: uuid, attributes?, relationships? } }.

    Annotations the server declares

    • title: Update resource
    • destructiveHint: true
Only reads 4Claude Code: allow
  • drupal_get_resourceGet a single resource by UUID for an entity_type/bundle, with optional includes.No findings

    Why it is in this group

    • The name "drupal_get_resource" says "get": a word for reading.
    Description, as the server wrote it
    Get a single resource by UUID for an entity_type/bundle, with optional includes. JSON:API: GET /jsonapi/{entity_type}/{bundle}/{uuid}.

    Annotations the server declares

    • title: Get resource
    • readOnlyHint: true
  • drupal_list_resource_typesList all available JSON:API resource types (entity_type/bundle pairs) with their hrefs, so the agent can discover what to query.No findings

    Why it is in this group

    • The name "drupal_list_resource_types" says "list": a word for reading.
    Description, as the server wrote it
    List all available JSON:API resource types (entity_type/bundle pairs) with their hrefs, so the agent can discover what to query. JSON:API: GET /jsonapi.

    Annotations the server declares

    • title: List resource types
    • readOnlyHint: true
  • drupal_list_resourcesList a collection of resources for an entity_type/bundle, with optional sorting, pagination, includes, and a single-field filter.No findings

    Why it is in this group

    • The name "drupal_list_resources" says "list": a word for reading.
    Description, as the server wrote it
    List a collection of resources for an entity_type/bundle, with optional sorting, pagination, includes, and a single-field filter. JSON:API: GET /jsonapi/{entity_type}/{bundle}.

    Annotations the server declares

    • title: List resources
    • readOnlyHint: true
  • drupal_search_contentConvenience node-title search: list nodes of a bundle whose title CONTAINS a query string.No findings

    Why it is in this group

    • The name "drupal_search_content" says "search": a word for reading.
    Description, as the server wrote it
    Convenience node-title search: list nodes of a bundle whose title CONTAINS a query string. JSON:API: GET /jsonapi/node/{bundle} with a verbose CONTAINS filter on title.

    Annotations the server declares

    • title: Search content
    • readOnlyHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.16.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http drupal https://drupal.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__drupal__drupal_list_resource_types",
      "mcp__drupal__drupal_list_resources",
      "mcp__drupal__drupal_get_resource",
      "mcp__drupal__drupal_search_content"
    ],
    "ask": [],
    "deny": [
      "mcp__drupal__drupal_create_resource",
      "mcp__drupal__drupal_update_resource",
      "mcp__drupal__drupal_delete_resource"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as drupal. Review it before you use it.