Reading view

I built an OAuth 2.0 WebMCP bridge for Drupal so AI agents can interact with your site securely [New Module]

I wanted AI agents to be able to search and retrieve content from my Drupal site without exposing passwords or bypassing Drupal's permission system. I couldn't find anything that did this securely, so I built it.

AI Connect (webmcp_connect) is a Drupal module that lets AI agents interact with your site via OAuth 2.0 + PKCE — the same standard as Google and GitHub.

Real example: Tell Claude: "Search my site for articles about climate change and summarize the top 5" — it authenticates as you, with your permissions, and returns only what you're allowed to see.

What's included: - 7 tools: search nodes, get content, search/get comments, current user info, translation - Auto-registration of OAuth clients (no pre-configuration needed) - Localhost redirect URI support for Claude Desktop / MCP clients - Token lifecycle management (refresh, revocation, rate limiting)

Installation:

composer require drupal/webmcp_connect drush en ai_connect -y 

Links: - Drupal.org: https://www.drupal.org/project/webmcp_connect - Docs: https://git.drupalcode.org/project/webmcp_connect

This is v1.0 — what tools would be most useful for your use case?

submitted by /u/Every_Individual_571
[link] [comments]
  •  

Career Pivot Advice (As frontend dev)

Hello peoples,

So I'm a mid-level Drupal Frontend dev, and I'm a little bit cooked as the kids would say.

Essentially I strayed away from coding in 2023 thinking I would always have the option to come back (wanted to try another career avenue that also got decimated). Lo and behold, all remote job opportunites all seem to have evaporated (at least in Canada). Sorta had put all my eggs in one basket hyper specializing in Drupal Frontend development thinking there would always be remote opportunities...

Anyways, times change, gotta focus on reskilling/upskilling.

So any drupal frontend devs that have had success stories? Any advice?

Should I spend the next months expanding knowledge in another framework? Or learning something such as CNC programming, or accessibility, or QA, etc.

(Got a full time job, so not red alert, but also need to switch asap)

Cheers

submitted by /u/Caster_Oh
[link] [comments]
  •  

Hybrid Full-Stack Developer (US-Based) — $40–$60/hr

We’re a senior US-based product team building clean, scalable platforms for US and Canadian clients. We’re looking for a hybrid full-stack developer who can own features end-to-end — frontend to backend — and help us ship products the right way.

Our Vision

We’re building a tight, high-output team that creates modern, reliable software without bloated processes or corporate noise. The goal is simple: ship clean architecture, scalable systems, and products that clients can actually grow on. We move fast, think long-term, and care about quality.

What You’ll Bring

- Strong communication and independent execution

- Experience with React / Next.js

- Backend experience with Node.js or Django

- Solid understanding of APIs, databases, and scalable systems

- Ability to align with US time zones

If you want to build serious products with serious people, let’s talk.

submitted by /u/Major-Toe-9697
[link] [comments]
  •  

Drupal revisioning and Rest API PATCH requests

When a content type has revisioning enabled, edits performed through the Drupal UI correctly create new revisions. However, updates made via the REST API (PATCH/PUT) modify the current revision in place and do not automatically create a new revision, unless explicitly programmed.

This behavior contradicts the intuitive and UI-based expectation that every content modification on a revision-enabled entity results in a new revision, regardless of the update channel.

What do you think, wouldn't the expected behaviour be to create a new revision for revision enabled content on Rest API PATCH request?

submitted by /u/Alarmed-Leek2205
[link] [comments]
  •  

Web devs: could a few people sanity-check a small in-page feedback tool I built?

Hey folks, I’m a web dev and I built a tiny tool for collecting website feedback directly on the page (click somewhere → leave a comment pinned to that spot).

I’m posting because I’m too close to it and I need honest outside feedback. I’m not trying to market anything — I’m specifically looking for people who’ll try it for 5–10 minutes and tell me what sucks / what’s unclear / what would stop you from using it on a real project.

What I’m hoping to learn:

  • Is the value obvious without me explaining it?
  • Does it feel smooth or fiddly?
  • What’s missing for real client reviews?
  • Any trust/privacy red flags at first glance?

If you’re willing, comment “I’ll test” and I’ll DM you a link (or DM me).
And if this kind of post isn’t allowed here, tell me and I’ll remove it right away.

submitted by /u/Connect_Winter4830
[link] [comments]
  •  

Drupal Upgrade to Drupal 2.0: A Quick Overview

Upgrading to Drupal 2.0 helps organizations modernize their websites with improved performance, stronger security, and better scalability. Older Drupal versions often face compatibility and maintenance challenges, making upgrades necessary for long-term digital growth.

Drupal 2.0 introduces a more flexible architecture, faster loading speeds, and improved integration capabilities with modern applications and cloud environments. It also enhances the content editing experience, allowing teams to manage websites more efficiently.

How the Upgrade Works

  • Assess the current Drupal website and modules
  • Replace outdated or unsupported components
  • Migrate content and configurations
  • Update themes for modern UI compatibility
  • Test performance and security before launch

Why It Matters

  • Improved website performance
  • Enhanced security standards
  • Easier integrations with third-party systems
  • Future-ready and scalable platform

Upgrading to Drupal 2.0 ensures your digital platform remains secure, efficient, and capable of supporting evolving business needs.

submitted by /u/Different-Algae7018
[link] [comments]
  •  

CMS 2.0 vs Standard Drupal

Hi folks,

I’m currently exploring Drupal CMS 2.0 and would like to understand how it compares with the standard Drupal setup.

If you’ve worked with CMS 2.0, could you please share:

  • The key differences you noticed compared to standard Drupal
  • Pros and cons of using CMS 2.0
  • Any challenges or limitations you faced
  • Scenarios where CMS 2.0 is a better fit (or not recommended)

I’m trying to evaluate whether CMS 2.0 is suitable for long-term projects, so your real-world experiences and suggestions would be really helpful.

Thanks in advance—looking forward to your thoughts!

submitted by /u/Prasanna-Venkat
[link] [comments]
  •  

Implementing a fairly complex database structure in Drupal.

I've been away from Drupal too long, sucked into WordPress. My company has an ongoing problem with the org chart - specifically it's advertising. I think I can use Drupal to manage this, but I have a lot of rust and haven't worked intensely with it in years (when 8 was current).

The Database I've sketched out uses a UUID approach to coordinate it's contents with outside databases it must stay in sync with, including the aforementioned WordPress site which I will be getting post information from. I'm trying to keep fields on only one table if feasible.

I'm going to go over some of the structure I designed without considering Drupal as the administrating program, so I am open to letting this change as long as I can get the same end result. Note also that this design is informed by schema.org entries for Medical Organizations - of which my company is one (and a fairly large one)

Everything is an Entity. This is the only table with an autoincrement field. Any entry created on any other table starts with an entity entry. For example, if I'm adding a provider the Entity table holds the mappings to the other databases, the entry name and a schema.org description, the person table contains information about the provider's name (given name, surname, which comes first since we have providers with Asian names, gender, etc), and the provider table contains information on whether they accepting new patients, the URL to their scheduler, their NPI (think social security number for medical professionals).

The provider table also cross-references with locations with additional information about which days the provider is at that location and which one is their primary. Another cross reference is which hospitals they have admission privileges to, and another maps which organizations they belong to. Yet another details their education, and their certifications, and the insurances they accept.

The UUID comes into play because hospitals also have insurance company contracts. So that table needs to be joinable with providers or hospitals.

So when I have an edit view of a provider I want the form to present this information cleanly without the user needing to go through multiple forms

I think Drupal can do this out of the box. If not out of the box I have written modules before, but in that event why use Drupal instead of just standing this up in Laravel or Symfony? I'm looking something that is resilient, but I don't want to spend more than a month on this if I can help it.

submitted by /u/Positive-Ring-5172
[link] [comments]
  •  

Only the first 20 embedded images are shown

Hello,

Working a new Drupal site 11 site. And did some testing. When I embed more than 20 images from the media library in CKEditor field (full html).

All the embedded images are shown in CK editor.
But when I switch to the frontend only the fist 20 images are shown are shown. The other content (text) shows correct but images (after number 20) are stripped from the page (also from the html).

Switched the theme to Olivero (to test if this was theme related) but th same problem occurred. Played somewhat with the CKeditor setting (disabled/enabled html corrections).

Checked the logs (php/mysql/apache / console) but saw no error messages.

Any ideas/suggestions what can cause this?

submitted by /u/Better-Alps8562
[link] [comments]
  •  

Is Drupal goodbfor higher education with three 3000 page websites?

As said in the title, a small university wants to move from modern campus to something else. I mentioned Drupal even though I have no experience with it but I saw that other large universities use it.

So can you give me some idea, thoughts and insides into it. What do you think the initial cost would be to have a 3rd party transfer and redevelopment the pages? The university wants to switch within the next few months.

I have to adjust my page count as today was the first day I could actually crawl my own websites and we have probably less than 1500 pages. I still want to go with this as it will be ready for the future and yearly less than what currently is paid.

submitted by /u/HikeTheSky
[link] [comments]
  •  

What Is the actual Drupal Way to Build list of teasers in Canvas?

With some excitement, I tried to build a site using Drupal Canvas. Not Drupal CMS, but actually building it from a clean installation. I rewired my thinking toward SDC, canvas pages, and canvas node templates, and after I fully understood it, I really thought Drupal might become a free-of-charge competitor to SaaS website builders like Webflow.

We talk about Drupal Canvas with excitement, but using it introduces two regressions for standard use cases compared to the old Drupal approach. Until these are solved, I do not see a wide adoption on production sites. The following:

First, it is not possible to switch other display types besides "full" to Canvas template. Drupal CMS somehow defines the Card display as managed by Canvas, but there is too much magic happening behind the scenes, which I was unable to replicate on my site. So if I have any view that should list some nodes in a form of a card/teaser, and let’s be honest, almost every site does, I am forced to use both a Canvas template for the full node and an old-style template file such as node--blogpost--teaser.html.twig, where I pass the props to SDC and mimic the Canvas usage for a teaser.

The second issue, no less important, is that the SDC with Canvas approach makes it impossible to use image styles. We are forced to use original images, and the canvas:image component has very limited functionality. Really? Image styles are one of the biggest advantages of Drupal.

How do you approach it? What is the actual "Drupal way" to build a list of cards with teaser images in Drupal Canvas based project? Is it there, or not yet?

Here are two related issues that i found regarding that, worth sharing:

https://www.drupal.org/project/canvas/issues/3562276
https://www.drupal.org/project/canvas/issues/3574412

This post is not intended to discredit Canvas, but simply to share a user’s experience and maybe help guide its development. Big thanks so far, keep going!

submitted by /u/Firflant
[link] [comments]
  •  

[Help] PHPUnit in Drupal Multisite loading 'default' instead of specific site directory

Hey everyone, I'm running into a frustrating issue with a Drupal Multisite setup and could use some help.

I'm on a Linux server running Drupal 10.6.2 and Drush 12.5.3.0. My working directory is /var/www/uat.

Here is my /var/www/uat/phpunit.myWebsiteBBB.xml:

<?xml version="1.0" encoding="UTF-8"?> <phpunit bootstrap="/var/www/uat/bootstrap.myWebsiteBBB.php" colors="true"> <php> <env name="DTT_SITE_DIR" value="myWebsiteBBB"/> <env name="SIMPLETEST_BASE_URL" value="https://uat.myWebsiteBBB.com"/> <env name="SIMPLETEST_DB" value="mysql://lmuat:Bwurp9vS(CQSbd5F@localhost:3306/myWebsiteBBB"/> <env name="BROWSERTEST_OUTPUT_DIRECTORY" value="/var/www/uat/web/sites/simpletest/browser_output"/> <ini name="memory_limit" value="-1"/> <server name="HTTP_HOST" value="uat.myWebsiteBBB.com"/> <server name="SERVER_NAME" value="uat.myWebsiteBBB.com"/> <env name="DTT_BASE_URL" value="https://uat.myWebsiteBBB.com"/> <env name="DTT_API_URL" value="https://uat.myWebsiteBBB.com"/> </php> <testsuites> <testsuite name="MyWebsiteBBB Existing Site Tests"> <directory>/var/www/uat/web/modules/custom/lps_api/tests/src/ExistingSite</directory> </testsuite> </testsuites> </phpunit> 

And my /var/www/uat/phpunit.myPageAAA.xml:

<?xml version="1.0" encoding="UTF-8"?> <phpunit bootstrap="/var/www/uat/web/core/tests/bootstrap.php" colors="true"> <php> <env name="DTT_SITE_DIR" value="default"/> <env name="SIMPLETEST_BASE_URL" value="https://uat.myPageAAA.ca"/> <env name="SIMPLETEST_DB" value="mysql://lmuat:Bwurp9vS(CQSbd5F@localhost:3306/multisite"/> <env name="BROWSERTEST_OUTPUT_DIRECTORY" value="/var/www/uat/web/sites/simpletest/browser_output"/> <ini name="memory_limit" value="-1"/> <server name="HTTP_HOST" value="uat.myPageAAA.ca"/> <server name="SERVER_NAME" value="uat.myPageAAA.ca"/> <env name="DTT_BASE_URL" value="https://uat.myPageAAA.ca"/> <env name="DTT_API_URL" value="http://localhost"/> </php> <testsuites> <testsuite name="MyPageAAA Existing Site Tests"> <directory>/var/www/uat/web/modules/custom/lps_api/tests/src/ExistingSite</directory> </testsuite> </testsuites> </phpunit> 

The tests are located in: /var/www/uat/web/modules/custom/lps_api/tests/src/ExistingSite/

I added some lines to debug the environment in /var/www/uat/web/modules/custom/lps_api/tests/src/ExistingSite/ClinicImagesConsistencyTest.php:

public function testClinicImagesMatchJson(): void { // --- HOME SAFE DIAGNOSTICS --- $site_path = \Drupal::getContainer()->getParameter('site.path'); $db_name = \Drupal\Core\Database\Database::getConnection()->getConnectionOptions()['database']; $dtt_url = getenv('DTT_BASE_URL'); fwrite(STDERR, "\n--- SCAN RESULTS ---\n"); fwrite(STDERR, "1. Environment URL (DTT_BASE_URL): " . ($dtt_url ?: 'VACÍO') . "\n"); fwrite(STDERR, "2. Folder you chose to upload : " . $site_path . "\n"); fwrite(STDERR, "3. Final database : " . $db_name . "\n"); fwrite(STDERR, "------------------------------\n"); // --- END OF SAFE DIAGNOSIS --- 

In /var/www/uat/web/sites/sites.php:

<?php $sites['upcore.branchmanager.myWebsiteBBB.com'] = 'myWebsiteBBB'; $sites['dev.branchmanager.myWebsiteBBB.com'] = 'myWebsiteBBB'; $sites['myWebsiteBBB.com'] = 'myWebsiteBBB'; $sites['uat.myWebsiteBBB.com'] = 'myWebsiteBBB'; 

I have two sites: uat.myPageAAA and uat.myWebsiteBBB. Inside /var/www/uat/web/sites, I have the following folders: myWebsiteBBB and default.

So, what's the problem? When I execute: ./vendor/bin/phpunit -c phpunit.myWebsiteBBB.xml

This is the output I get:

--- SCAN RESULTS --- 1. Environment URL (DTT_BASE_URL): https://uat.myWebsiteBBB.com 2. Folder you chose to upload: sites/default 3. Final database: multisite 

Basically, when I run the tests for myWebsiteBBB, it does not load the myWebsiteBBB site data. Instead, it falls back to the default directory. Because of this, everything goes wrong when I execute my test script: /var/www/uat/run_multisite_tests.sh

#!/bin/bash # Ensure we run everything from the directory where this script is located SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # Define base log directory LOG_BASE_DIR="$SCRIPT_DIR/logs" # Create the logs directory if it doesn't exist mkdir -p "$LOG_BASE_DIR" # Define static log files for this execution MYPAGEAAA_LOG="$LOG_BASE_DIR/uat_myPageAAA.log" MYWEBSITEBBB_LOG="$LOG_BASE_DIR/uat_myWebsiteBBB.log" echo "===================================================" echo "🚀 Starting tests for MyPageAAA..." echo "📄 Logging output to: logs/uat_myPageAAA.log" echo "===================================================" # Run PHPUnit and pipe the output to 'tee' to overwrite the log file ./vendor/bin/phpunit -c phpunit.myPageAAA.xml | tee "$MYPAGEAAA_LOG" MYPAGEAAA_RESULT=${PIPESTATUS[0]} echo "" echo "===================================================" echo "🚀 Starting tests for MyWebsiteBBB..." echo "📄 Logging output to: logs/uat_myWebsiteBBB.log" echo "===================================================" ./vendor/bin/phpunit -c phpunit.myWebsiteBBB.xml | tee "$MYWEBSITEBBB_LOG" MYWEBSITEBBB_RESULT=${PIPESTATUS[0]} echo "" echo "=================== SUMMARY =======================" if [ $MYPAGEAAA_RESULT -eq 0 ]; then echo "✅ MyPageAAA: SUCCESS" else echo "❌ MyPageAAA: FAILED (Check logs/uat_myPageAAA.log)" fi if [ $MYWEBSITEBBB_RESULT -eq 0 ]; then echo "✅ MyWebsiteBBB: SUCCESS" else echo "❌ MyWebsiteBBB: FAILED (Check logs/uat_myWebsiteBBB.log)" fi echo "===================================================" # If any test failed, return an error code for continuous integration systems if [ $MYPAGEAAA_RESULT -ne 0 ] || [ $MYWEBSITEBBB_RESULT -ne 0 ]; then exit 1 fi exit 0 

Has anyone run into this before? Why is PHPUnit ignoring my myWebsiteBBB environment variables and forcing the default site directory? Any pointers would be greatly appreciated!

submitted by /u/ScriptNone
[link] [comments]
  •  
❌