diff --git a/utils/ipc/generate.py b/utils/ipc/generate.py
new file mode 100755
index 00000000..3a76c37c
--- /dev/null
+++ b/utils/ipc/generate.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python3
+
+import os
+import sys
+
+sys.dont_write_bytecode = True
+
+import mojo.public.tools.bindings.mojom_bindings_generator as generator
+
+def _GetModulePath(path, output_dir):
+  return os.path.join(output_dir, path.relative_path())
+
+# Override the mojo code generator's generator list to only contain our
+# libcamera generator
+generator._BUILTIN_GENERATORS = {'libcamera': 'mojom_libcamera_generator'}
+
+# Override the mojo code generator's _GetModulePath method to not add
+# the '-module' suffix when searching for mojo modules
+generator._GetModulePath = _GetModulePath
+
+generator.main()
