diff --git a/MODULE.bazel b/MODULE.bazel
new file mode 100644
index 0000000000..a989244d2c
--- /dev/null
+++ b/MODULE.bazel
@@ -0,0 +1,81 @@
+module(
+    name = "grpc",
+    version = "1.66.0.bcr.2",
+    compatibility_level = 1,
+    repo_name = "com_github_grpc_grpc",
+)
+
+bazel_dep(name = "abseil-cpp", version = "20240116.0", repo_name = "com_google_absl")
+bazel_dep(name = "apple_support", version = "1.15.1", repo_name = "build_bazel_apple_support")
+bazel_dep(name = "bazel_skylib", version = "1.5.0")
+bazel_dep(name = "boringssl", version = "0.0.0-20230215-5c22014")
+bazel_dep(name = "c-ares", version = "1.15.0", repo_name = "com_github_cares_cares")
+bazel_dep(name = "gazelle", version = "0.36.0", repo_name = "bazel_gazelle")
+bazel_dep(name = "google_benchmark", version = "1.8.4", repo_name = "com_github_google_benchmark")
+bazel_dep(name = "googleapis", version = "0.0.0-20240819-fe8ba054a", repo_name = "com_google_googleapis")
+bazel_dep(name = "googletest", version = "1.14.0.bcr.1", repo_name = "com_google_googletest")
+bazel_dep(name = "opentelemetry-cpp", version = "1.14.2", repo_name = "io_opentelemetry_cpp")
+bazel_dep(name = "platforms", version = "0.0.10")
+bazel_dep(name = "prometheus-cpp", version = "1.2.4", repo_name = "com_github_jupp0r_prometheus_cpp")
+bazel_dep(name = "protobuf", version = "26.0.bcr.2", repo_name = "com_google_protobuf")
+bazel_dep(name = "re2", version = "2023-09-01", repo_name = "com_googlesource_code_re2")
+bazel_dep(name = "rules_apple", version = "3.5.1", repo_name = "build_bazel_rules_apple")
+bazel_dep(name = "rules_cc", version = "0.0.9")
+bazel_dep(name = "rules_go", version = "0.48.0", repo_name = "io_bazel_rules_go")
+bazel_dep(name = "rules_java", version = "7.4.0")
+bazel_dep(name = "rules_proto", version = "6.0.0")
+bazel_dep(name = "zlib", version = "1.3.1.bcr.1")
+
+grpc_repo_deps_ext = use_extension("//bazel:grpc_deps.bzl", "grpc_repo_deps_ext")
+use_repo(
+    grpc_repo_deps_ext,
+    "com_envoyproxy_protoc_gen_validate",
+    "com_github_cncf_xds",
+    "envoy_api",
+    "google_cloud_cpp",
+    "io_opencensus_cpp",
+)
+
+switched_rules = use_extension("@com_google_googleapis//:extensions.bzl", "switched_rules")
+switched_rules.use_languages(
+    cc = True,
+    grpc = True,
+    python = True,
+)
+use_repo(switched_rules, "com_google_googleapis_imports")
+
+bazel_dep(name = "rules_python", version = "0.31.0")
+
+PYTHON_VERSIONS = [
+    "3.8",
+    "3.9",
+    "3.10",
+    "3.11",
+    "3.12",
+]
+
+python = use_extension("@rules_python//python/extensions:python.bzl", "python")
+
+[
+    python.toolchain(
+        is_default = python_version == PYTHON_VERSIONS[-1],
+        python_version = python_version,
+    )
+    for python_version in PYTHON_VERSIONS
+]
+
+pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")
+
+[
+    pip.parse(
+        hub_name = "grpc_python_dependencies",
+        python_version = python_version,
+        requirements_lock = "//:requirements.bazel.txt",
+    )
+    for python_version in PYTHON_VERSIONS
+]
+
+use_repo(pip, "grpc_python_dependencies")
+
+grpc_python_deps_ext = use_extension("//bazel:grpc_python_deps.bzl", "grpc_python_deps_ext")
+use_repo(grpc_python_deps_ext, "cython")
