# Databricks Genie One MCP: Beta URL ends 30 November

> The Genie One MCP Beta URL fails after 30 November 2026. Move clients to system.ai.genie_one_mcp and the ai-gateway OAuth scope.

By Ivan Vydrin, 3 November 2026. Databricks Field Guide, TechFabric. Canonical: https://databricks.techfabric.com/notes/upcoming-end-of-life-for-the-genie-one/

The string `/api/2.0/mcp/genie` is about to become a landmine in agent configs. Databricks' [what's coming page](https://docs.databricks.com/aws/en/release-notes/whats-coming#upcoming-end-of-life-for-the-genie-one-mcp-beta-endpoint) puts end of life for the bare Genie One MCP Beta endpoint on 30 November 2026 (it had been 31 October), after which those requests fail, and the [Genie One MCP page](https://docs.databricks.com/aws/en/agents/mcp-tools/genie-mcp#access) (29 October 2026) sends that bare path to generally available `system.ai.genie_one_mcp`. The same prefix, with a space id after it, is still how you reach a curated Genie Agent. We'd rather miss a bare Beta URL than rewrite a Genie Agent onto Genie One.

## Loud miss, silent rewrite

A bare Beta client that we forget dies on 30 November where everyone can see it. A Genie Agent client that we "fix" keeps answering, only the answer is now Genie One across the workspace, and the curated agent is gone from the path. That is the worse failure: the chat still returns a chart, nobody opens an incident, and the next person to debug it has no space id left to find. The [built-in MCP page](https://docs.databricks.com/aws/en/agents/mcp-tools/built-in-mcp-services) already keeps the longer Genie Agent URL as its own Public Preview server, with scope `genie` and calls that bypass Unity Gateway. The [glossary](https://databricks.techfabric.com/guide/glossary/) treats the two names as different products for the same reason. So before we open Unity Gateway, we'd classify every config that matches the prefix:

```python
def genie_mcp_client(path):
    """path is the MCP server URL's path, as the client config holds it."""
    parts = path.strip("/").split("/")
    if parts[:4] != ["api", "2.0", "mcp", "genie"]:
        return "not this retirement"
    if len(parts) == 4:
        return "move: bare Genie One Beta"
    return "leave: Genie Agent, space id still in the path"

assert "leave" in genie_mcp_client("api/2.0/mcp/genie/abc123")
assert "move" in genie_mcp_client("api/2.0/mcp/genie")
assert genie_mcp_client("api/2.0/mcp/sql") == "not this retirement"
```

That classifier is our check. It is not a Databricks API. We'd run it over coding-agent MCP files, job secrets and notebook widgets the same way, and every `leave` row stays off the cutover list. The toolkit's [Genie readiness check](https://databricks.techfabric.com/guide/databricks-toolkit/) reads a space's description, its warehouse's auto-stop and its column comments, and never sees this path, which is why the classifier has to live next to the clients.

## Cut over the move rows together

For a `move` row the Genie One page wants the Unity Gateway MCP URL with `system.ai.genie_one_mcp` and the workspace id in `o`, the OAuth scope `ai-gateway`, and `EXECUTE` on that MCP for the identity that will call ([Share an MCP](https://docs.databricks.com/aws/en/ai-gateway/govern-mcp-service#share-an-mcp)). We'd change those three in one sitting, and we'd confirm the grant on the job's principal, not on the person who tested in the browser, because a default `EXECUTE` on `system.ai` can make the editor succeed while the overnight principal still fails. [On-behalf-of auth](https://docs.databricks.com/aws/en/agents/mcp-tools/genie-mcp#considerations) is what that page recommends for interactive callers; a service principal is allowed for automation. After 30 November we'd leave the classifier in CI, so a config copied from an old repository is caught as a `move` row in review instead of failing overnight. New agents we'd point at `system.ai.genie_one_mcp` from the start.

```mermaid Loud miss versus silent rewrite
flowchart TD
  A["URL matches mcp/genie"] --> B{"Space id after genie"}
  B -->|"yes"| C["Leave it: Genie Agent"]
  B -->|"no"| D["Move to system.ai.genie_one_mcp"]
  C --> E["Keeps the curated agent"]
  D --> F["Fails loudly if missed after 30 Nov"]
```

> **Our position**: We'd cut over only bare Beta URLs, and we'd take a loud miss on 30 November 2026 over a Genie Agent that keeps answering as Genie One. For each `move` row, the Gateway URL, `ai-gateway` scope and `EXECUTE` on the calling identity ship together.
